插入删除基于数组的顺序表
// 基于静态数组实现顺序表删除与插入
# include <stdio.h>
# define maxsize 10
// 定义顺序表结构体
typedef struct {
// 数组空间
int data[maxsize];
// 当前长度
int length;
}SqlList;
// 初始化
void InitList(SqlList &L){
// 数据元素全变为0
for (int i=0;i<10;i++) {
L.data[i] = 0;
}
// 当前长度为0
L.length = 0;
}
// 写入maxsize-1个元素
void wite_data(SqlList &L) {
// for循环写入数据
for (int i=0;i<maxsize-1;i++) {
L.data[i] = i;
}
// 当前长度为maxsize-1
L.length = maxsize-1;
}
// 删除第i个元素 e为元素值
bool ListDelete(SqlList &L, int i, int &e) {
if ((i<1)||(i>L.length)) {
return false;
}else{
// 保存要删除的元素
e = L.data[i-1];
// 移动元素
for (int j=i-1;j<L.length;j++) {
L.data[j] = L.data[j+1];
}
// 顺序表当前长度
L.length = L.length - 1;
return true;
}
}
// 在第i个位置插入a元素
bool add_data(SqlList &L, int i, int a) {
if ((i<1)||(i>L.length+1)) {
return false;
}else {
// 移动元素
for (int j=L.length+1;j>i-1;j--) {
L.data[j] = L.data[j-1];
}
// 写入a
L.data[i-1] = a;
// 顺序表长度
L.length = L.length + 1;
return true;
}
}
// 主函数
int main() {
// 定义顺序表
SqlList L;
// 写入数据
wite_data(L);
for (int i=0;i<L.length;i++) {
printf("第 %d 个元素 : %d\n", i+1, L.data[i]);
}
printf("当前顺序表长度: %d\n", L.length);
// 删除数据
int e = -1;
if (ListDelete(L, 5, e)){
printf("删除成功");
printf("删除的元素: %d\n", e);
for (int i=0;i<L.length;i++) {
printf("第 %d 个元素 : %d\n", i+1, L.data[i]);
}
printf("当前顺序表长度: %d\n", L.length);
}else {
printf("删除失败");
}
// 插入元素
int add = 0;
if (add_data(L, 5, add)) {
printf("插入成功");
printf("插入的元素: %d\n", add);
for (int i=0;i<L.length;i++) {
printf("第 %d 个元素 : %d\n", i+1, L.data[i]);
}
printf("当前顺序表长度: %d\n", L.length);
}else {
printf("插入失败");
}
return 0;
}