大话数据结构(五)(java程序)——顺序存储结构的插入与删除

时间:2023-03-10 03:10:04
大话数据结构(五)(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;
} }