关于这部分其实操作都很简单且基础,我认为需要注意的有以下几个点:
- 插入和删除的循环怎么写?插入的时候是尾部有空位,所以先从尾部开始进行移动;删除则相反,是从删除元素的位置开始前移。
- 关于边界的条件:需要注意的是数组的下标==插入的p变量;而length是数据数量,注意区分length和maxsize,length才决定了当前顺序表的元素数量,
因此在进行元素插入的时需要进行元素后移,而此时最后一个元素是被移出了顺序表的,因此不会被记录下来
我这样理解似乎有点不正确,但是具体又不知道错在哪里了,可以交流一下。
结构体顺序表结构体定义
typedef struct{
int data[MaxSize];//存放数据的数组
int length;//顺序表的长度,经过insertElem函数和deleteElem函数之后会改变
}SqList;
创建顺序表
void initList(SqList &L){
for(int i=0;i<MaxSize;i++){
//顺序表结构初始化,注意边界情况这里i最大为MaxSize-1
L.data[i]=0;
}//
L.length=0;//一开始顺序表里面没有内容,所以初始化为0
}
查询指定元素(按值查询)
int findElem(SqList L,int e){
int i;
for(i=0;i<L.length;i++) {
//边界情况,数组是从0开始的
if (e == L.data[i])
return i;
}
return -1;
}
插入元素
int insertElem(SqList &L,int p,int e){
//这里记得加上取地址符号,因为需要改变L中内容
if(p<0||p>L.length||L.length>=MaxSize)//考虑不成立情况,注意length,分清楚p是下标,length是数据数量
return 0;
for(int i=L.length-1;i>=p;i--){
//边界情况考虑到,i从数组倒数第二个开始进行后移
L.data[i+1]=L.data[i];
}
L.data[p]=e;
++(L.length);
return 1;
}
删除元素
int deleteElem(SqList &L,int p,int e){
if(p<0||p>L.length){
return -1;
}
// e=L.data[p];
for(int i=p;i<=L.length-1;i++){
L.data[i]=L.data[i+1];
}
--(L.length);
return 1;
}