目录
在顺序表L的第i(1≤i≤L.length+1)个位置插入新元素e
一维数组静态分配
#define MAXSIZE 50 //线性表的最大长度
typedef struct {
ElemType data[MAXSIZE]; //顺序表的元素
//ElemType是由typedef定义的数据元素的类型
int length; //顺序表的当前长度
}SqList; //使用typedef重新定义的顺序表的类型
一维数组动态分配
#define InitSize 100 //表长的初始定义
typedef struct {
ElemType* data; //指示动态分配数组的指针
//ElemType是由typedef定义的数据元素类型
int length, //顺序表的当前长度
MaxSize; //动态数组的最大容量
}SqList; //使用typedef重新定义的顺序表的类型
//动态分配空间
L.data = (ElemType*)malloc(InitSize * sizeof(ElemType));
在顺序表L的第i(1≤i≤L.length+1)个位置插入新元素e
/*
* 将元素e插入到顺序表L中位序i的位置
*/
bool ListInsert(SqList &L, int i,ElemType e){
//下表[1, L.length + 1]合法
if ( i < 1 || i > L.length + 1) {
return false;
}
//当前存储空间已满,不能插入
if (L.length >= MaxSize)
return false;
//移位
for (int j = L.length; j >= i; j--) {
L.data[j] = L.data[j - 1];
}
//插入
L.data[i - 1] = e;
//表长+1
L.length++;
return true;
}
删除顺序表L中第i(1≤i≤L.length)个位置的元素
/*
* L:线性表
* i:待删除元素在线性表的位置
* e:记录删除元素的数据,通过引用返回
*/
bool ListdDelete(SqList &L, int i, ElemType &e) {
//非法判断
if ( i < 1 || i > L.length) {
return false;
}
//取出需要删除的元素的数据
e = L.data[i - 1];
//移位
for (int j = i; j < L.length; j++) {
L.data[j - 1] = L.data[j];
}
//长度减一
L.length--;
return true;
}
在顺序表L中查找第一个元素值等于e的元素,并返回其位序
/*
* 查找顺序表中值为e的元素,如果查找成功,返回元素位序,否则返回0
*/
int LocateElem(SqList L, ElemType e) {
int i;
for (i = 0; i < L.length; ++i) {
if (L.data[i] == e) {
//位序与下标有1的差距
return i + 1;
}
}
//查找失败
return 0;
}