顺序表:
顺序表是线性表的顺序存储方式,且地址存储连续
特点:
1.顺序表的底层实现是数组,并且需要预先分配内存
2.顺序表中逻辑上相邻的数据元素,其物理意义上也相邻
3.顺序表不便于插入和删除操作
4.便于随机存取
代码实现:
定义一个object类型的数组,并且,根据所需要的存储数据的大小定义其数组长度
Object[]list;
int cur;
public Sqlist(int maxsize){
cur=0;
list=new Object[maxsize];
}
这里定义了一个objec类型的数组,定义了一个表长,maxsize表示定义的顺序表最大存储空间
在定义了一个构造函数,用来在创建这个顺序表的时候,定义其最大储存空间并初始化顺序表长度
顺序表的顺序添加方法
//按顺序添加元素
public void add(Object x){
if(cur==list.length){
return;
}
list[cur]=x;
cur++;
}
在添加中,首先需要判断当前长度是否已经达到顺序表中的最大长度,没有达到在
list[cur]=x; c++;将要添加的元素要插入到顺序表的最后;然后索引加1。
顺序表在指定位置添加元素方法
public void insert(int i,Object x){//注意:索引应当是从0开始
if(cur==list.length){
System.out.println("顺序表已满");
return;
}
if(i<0||i>cur){
System.out.println("插入不合法");
return;
}
for (int j = cur; j>i ; j--) { //遍历待插入后面的数
list[j] = list[j - 1];//待插入的后面的数都向后移动
}
list[i]=x;
cur++;
}//在指定位置添加值
首先两个判断,判断表长是否已经已经达到最大存储限制,再判断插入位置是否和法,
符合就将元素添加,如果添加位置有元素,则之后的所有元素都向后移动
需要注意的是顺序表的添加索引是从0开始
删除方法
public void remove(int i){
if(isEmpty()) {
System.out.println("顺序表为空");
return;
}
if(i<0||i>cur){
System.out.println("删除不合法");
return;
}
for (int j =i; j<cur-1; j++) {//核心
list[j] = list[j + 1];//被删除元素后面的数都向前移动
}
cur--;
}//删除指定位置的值
删除方法和插入指定元素有些类似,不过是最后删除的位置后面有元素的话,就将其后面的所有元素前移
查询指定元素
public Object get(int i){
if(i<0||i>cur){
return null;
}
return list[i];
}//返回一个指定元素值
如果要查询的元素没有超过表长并且索引值是大于等于0的,那么就返回一所查询索引的数组的值
顺序表的输出
public void display(){
for (int i = 0; i <length() ; i++) {
System.out.print(list[i]+" ");
}
}//打印顺序表
这里我写了一个length()方法来把表长得到
for循环遍历输出即可