大话数据结构(五)(java程序)——顺序存储结构的插入与删除
获得元素操作
对于线性表的顺序存储结构来说,我们要实现getElement操作,即将线性表的第i个位置元素返回即可
插入操作
插入算法思路:
1、如果插入位置不合理,抛出异常
2、如果插入表的长度大于等于数组长度,则抛出异常或动态增容
3、从最后一位元素开始向前遍历到第i个位置,分别把它们都向后移动一个位置
4、将要插入元素填入位置i处
5、表长度加1
删除操作
1、如果删除位置不合理,抛出异常
2、取出插入元素
3、从删除元素位置开始遍历到最后一个元素位置,分别将它们都向前移动一位
4、表长度减一
public interface List { public Object getElement(int index) throws Exception; public void doInsert(Object obj,int index) throws Exception; public void doDelete(int index) throws Exception; }
public class SequenceList implements List{ static final int DEFUALTLENTH=10; int maxSize;//最大数组长度 int size;//当前长度 Object[] list;//对象数组 //顺序表初始化方法 public void init(int size1){ maxSize = size1;//这个表的长度为size1 list = new Object[size1]; } //无参构造方法 public SequenceList() { init(DEFUALTLENTH); } //有参构造方法 public SequenceList(int size2){ init(size2); } @Override public Object getElement(int index) throws Exception { if(size==0 || index<0 || index>=size){ System.out.println("参数不正确"); } if(size == maxSize){ System.out.println(""); } return list[index]; } @Override public void doInsert(Object obj,int index) throws Exception { if(index<0 || index>size+1){ System.out.println("参数错误"); } if(size == maxSize){ System.out.println("线性表已满,无法插入"); } for(int i=size-1;i>index-1;i--){ list[i+1]=list[i];//指定位置之后的元素都后移一位 } list[index] = obj; size++; } @Override public void doDelete(int index) throws Exception { if(index<0||index>=size){ System.out.println("参数错误"); } if(index<size){ for(int i=size-1;i>index;i--){ list[i-1] = list[i]; } } size--; } }
public class ListTest { public static void main(String args[]){ SequenceList seq = new SequenceList(20); try { seq.doInsert("aa", 1); seq.doInsert("bb", 2); seq.doInsert("cc", 3); for(int j=0;j<seq.size;j++){ System.out.println(seq.getElement(j));} } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
public class StudentList { public static void main(String args[]){ SequenceList seqList = new SequenceList(30); try { seqList.doInsert(new Student(1,"小米","女",23), seqList.size);//每次插入,都在表的最后一位插入 seqList.doInsert(new Student(2, "小徐", "男", 22), seqList.size); for(int i=0;i<seqList.size;i++){ System.out.println("第"+(i+1)+"学生信息为:"+seqList.getElement(i).toString()); } } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } } class Student{ private int id; private String name; private String gender; private int age; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getGender() { return gender; } public void setGender(String gender) { this.gender = gender; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } @Override public String toString() { return "student [id=" + id + ", name=" + name + ", gender=" + gender + ", age=" + age + "]"; } public Student(int sid,String name,String gender,int age){ this.id = sid; this.name = name; this.gender = gender; this.age = age; } }