#include <stdio.h> // 包含标准输入输出头文件
#define MaxSize 50 // 定义数组最大容量为50
typedef int ElemType; // 定义元素类型为整型
// 定义一个结构体来表示顺序表
typedef struct{
ElemType data[MaxSize]; // 存储数据的数组
int len; // 当前表的长度
}SqList;
// 插入操作函数,将元素插入到顺序表的指定位置
bool ListInsert(SqList &L, int i, ElemType element){
// 判断插入位置是否合法
if(i < 1 || i > L.len + 1){
return false;
}
// 判断表是否已满
if(L.len == MaxSize){
return false;
}
// 将第 i 个及其后的元素向后移
for(int j = L.len; j >= i; j--){
L.data[j] = L.data[j - 1];
}
// 在位置 i-1 处插入新元素
L.data[i - 1] = element;
// 表长度加一
L.len++;
return true;
}
// 打印顺序表中的所有元素
void PrintList(SqList L){
int i;
// 遍历数组并打印每个元素
for(i = 0; i < L.len; i++){
printf("%3d", L.data[i]);
}
printf("\n");
}
// 删除操作函数,在指定位置删除一个元素
bool ListDelete(SqList &L, int i, ElemType &e){
// 检查删除位置是否合法
if(i < 1 || i > L.len){
return false;
}
// 记录要删除的元素
e = L.data[i - 1];
// 将第 i 个及之后的元素向前移动一位
for(int j = i; j < L.len; j++){
L.data[j - 1] = L.data[j];
}
// 表长度减一
L.len -= 1;
return true;
}
// 查找操作函数,查找指定元素在顺序表中的位置
int ListRetrieve(SqList L, ElemType e){
// 遍历数组寻找元素,并返回其索引(从1开始)
for(int i = 0; i < L.len; i++){
if(L.data[i] == e){
return i + 1;
}
}
// 如果未找到元素,返回0
return 0;
}
int main(){
SqList L; // 创建顺序表实例
bool ret; // 用于存储操作结果
ElemType del; // 用于存储删除的元素
// 初始化顺序表
L.data[0] = 1;
L.data[1] = 2;
L.data[2] = 3;
L.len = 3;
// 尝试插入元素
ret = ListInsert(L, 2, 60);
if(ret){ // 如果插入成功
printf("insert sqlist success\n");
PrintList(L); // 打印列表
}else{ // 如果插入失败
printf("insert sqlist failed\n");
}
// 尝试删除元素
ret = ListDelete(L, 1, del);
if(ret){ // 如果删除成功
printf("delete sqlist success\n");
printf("del element=%d\n", del); // 打印被删除的元素
PrintList(L); // 打印列表
}else{ // 如果删除失败
printf("delete sqlist failed\n");
}
// 尝试检索元素的位置
int retr = ListRetrieve(L, 2);
if(retr){ // 如果检索成功
printf("retrieve element success\n");
printf("retrieve element of position=%d\n", retr); // 打印元素的位置
}else{ // 如果检索失败
printf("element not exist\n");
}
scanf("%d"); // 这里可能用于暂停程序以便查看输出结果
return 0;
}