顺序表的插入删除操作
//1.定义一个顺序表
方法1:固定长度
#define maxSize 50
typedef struct{
ElemType data[maxSize];//顺序表的元素,其中ElemType为数据类型,这里没有指定,用ElemType代指
int length;//顺序表的当前长度
}Sqlist;//顺序表的类型定义
方法2 :可变长度
#define InitSize 100
typedef struct{
ElemType *data;//指示动态分配数组的指针
int length,Maxsize;//顺序表的当前个数和最大容量
}Sqlist;//顺序表的类型定义
动态分配的语法:
L.data = (ElemType *)malloc(sizeof(Elemtype)*InitSize);
插入的实现:
//代码实现思想:
// 1.首先判断i插入的位置是否合理,若小于1或者大于L.length+1则表示加入的位置有无
// 2.要想插入,首先判断表的长度:若表的长度达到了Maxsize则表示表已经存满,不能再加入新元素
// 3.当以上情况不存在时,则可以进行插入元素:首先需要将要插入位置后面的所有元素向后移动1位,把第i个位置腾出,进行添加,即可。
// 实现代码如下:
bool ListInsert(Sqlist &L,int i,ElemType e){//在顺序表L中的第i个位置插入元素e,注意&表示引用类型,简单的说就是添加数据后直接改变L
if(i < 1 || i > L.length + 1){
return false;//在实际数组中添加的位置是data[i - 1]
}
if(L.length >= Maxsize){
return falae;//存储空间已经满了返回false
}
for(int j = L.length; j >= i; j--){//获取顺序表本来的长度,再进行遍历
L.data[j] = L.data[j - 1];//将大于等于第i位的数往后面移动一位
}
L.data[i - 1] = e;//将数据e添加到第i的位置,注意再data数组中第i个位置的实际位置为i-1
L.length++;//添加了元素,数组的长度增加1
return true;
}
成功实现顺序表的添加
删除表中数据
//思想方法:
// 1.判断删除i的位置是否合法,不合法则删除失败
// 2.将要删除元素后面的元素全部向前移动一位,即表示删除成功
//代码实现:
bool ListDelete(Sqlist &L,int i, ElemType &e){
if(i < 1 || i > L.length + 1){
return false;
}
e = L.data[i - 1];//将要删除的元素赋值给e
for(int j = i; j < L.length; j++){
L.data[j - 1] = L.data[j]; //将第i位后面的元素向前移动一位
}
L.length--;//删除元素后长度减1
return true;
}
顺序表成功实现删除