1.初始设置定义
#define Maxsize 100 // 定义最大空间
typedef int ElemType; // 定义元素类型
2.静态分配定义
typedef struct{ // 静态分配定义
ElemType data[Maxsize]; // 定义顺序表中一维数组
int length; // 定义顺序表长度
}SqList;
3.动态分配定义(优先推荐)
typedef struct{ // 动态分配定义
ElemType *elem; // 定义顺序表中一维数组
int length; // 定义顺序表长度
} SqList;
4.顺序表初始化
bool InitList(SqList &L){ // 初始化顺序表
L.elem = new int[Maxsize]; // 为顺序表动态分配Maxsize个空间
if(!L.elem)return false; // 分配空间失败
L.length = 0; // 顺序表初始为0
return true;
}
5.顺序表创建
bool CreatList(SqList &L){ // 创建顺序表
int x,i = 0;
scanf("%d",&x);
while(x != -1){ // 输入-1时结束(结束条件课自行设置)
if(L.length == Maxsize){
printf("顺序表已满");
return false;
}
L.elem[i++] = x; // 将数据x存入第i个位置,并令i后移至下一位
L.length++; // 顺序表长度+1
scanf("%d",&x);
}
return true;
}
6.顺序表中查找第i个数据
bool GetElem(SqList L, int i, int &e){ // 获取第i个元素存入e中
if(i<1 || i>L.length)return false; // 若i超出限度则无效
e = L.elem[i-1]; // 将第i个元素存入e中
return true;
}
7.顺序表中查找元素e的位置
int LocateElem(SqList L, int e){ // 查找元素e的位置
for(int i=0; i<L.length; i++)
if(L.elem[i] == e)return i+1; // 返回e的位置
return -1; // 若未找到则返回-1
}
8.在顺序表中插入元素e
bool ListInsert_sq(SqList &L, int i, int e){ // 在顺序表第i个位置插入元素e
if(i<1 || i>L.length+1)return false; // 若i超出限度则无效
if(L.length == Maxsize)return false; // 若顺序表已满则无法插入
for(int j=L.length-1; j>=i-1; j--) // 数据后移将插入位置腾出
L.elem[j+1] = L.elem[j];
L.elem[i-1] = e; // 将元素e放入位置
L.length++; // 顺序表长度+1
return true;
}
9.删除顺序表中第i个数据
bool ListDelete_sq(SqList &L, int i, int &e){ // 删除顺序表第i个位置的元素
if(i<1 || i>L.length+1)return false; // 若i超出限度则无效
e = L.elem[i-1]; // 保存被删数据至e中
for(int j=i; j<=L.length; j++)
L.elem[j-1] = L.elem[j];
L.length--; // 顺序表长度-1
return true;
}
10.合并有序顺序表La与Lb
void MergeSqList(SqList La, SqList Lb, SqList &Lc){ // 将有序顺序表La和Lb合并为Lc
int i,j,k;
i = j = k = 0;
Lc.length = La.length + Lb.length; // 新表Lc的长度为La与Lb两表长度之和
Lc.elem = new int[Lc.length]; // 为新表Lc分配空间
while(i<La.length && j<Lb.length){ // 若La与Lb非空表
if(La.elem[i] <= Lb.elem[j]) // 依次取出La与Lb中较小值放入新表Lc中
Lc.elem[k++] = La.elem[i++];
else
Lc.elem[k++] = Lb.elem[j++];
while(i<La.length) // 若La还有剩余则将其全部放入新表Lc中
Lc.elem[k++] = La.elem[i++];
while(j<Lb.length) // 若Lb还有剩余则将其全部放入新表Lc中
Lc.elem[k++] = Lb.elem[j++];
}
}