顺序表的删除操作
一、数据删除
操作的步骤
1)判断顺序表是否为空,如果没有数据,操作失败;
2)判断删除位置是否合理,不合理则操作失败;
3)从被删除的数据开始,依次被后一位置上的数据覆盖,直到最后一个数据。
4)顺序表当前长度减1。
int delete (SQL_LIST *L, int i)
{// 判断顺序表是否为空,如果空,操作失败if (L->length == 0){return 0;}// 判断删除的位置是否合理,不合理,操作失败if (i < 1 || i > L->length){return 0;}// 从被删除元素开始,依次被后一个位置上的元素覆盖for (int j = i - 1; j < L->length; j++){L->data[j] = L->data[j + 1];}// 顺序表长度减1L->length--;return 1;
}int main()
{// 定义顺序表SQL_LIST list;// 对顺序表进行初始化init_list(&list);// 插入元素insert(&list, 1, 1);insert(&list, 2, 3);insert(&list, 3, 5);insert(&list, 4, 7);insert(&list, 5, 9);// 删除元素delect(&list, 2);// 展示顺序表show(&list);return 0;
}
二、完整代码
#include <stdio.h>#define MAX_SIZA 100
typedef int ElementType;typedef struct _sql_list {ElementType data[MAX_SIZA];int length;
} SQL_LIST; // 初始化函数
void init_list(SQL_LIST *L) {L->length = 0;
} // 遍历顺序表
void show(SQL_LIST *L) {int i;for (i = 0; i < L->length; i++) {printf("%d", L->data[i]);if (i < L->length-1) {printf(", ");}else {printf("\n");}}
}// 插入数据
int insert(SQL_LIST* L, int i, ElementType e) {int j;// 判断顺序表是否已满,如果满了,操作失败if (L->length == MAX_SIZA) {return 0;}// 判断插入位置是否合理,如果不合理,操作失败if (i < 1 || i > L->length + 1) {return 0;}// 从最后一个元素开始向前到出入位置,将元素后移for (j = L->length - 1; j >= i - 1; j--) {L->data[j + 1] = L->data[j];}// 将e填入第i-1个位置L->data[i - 1] = e;// 顺序表长度加1L->length++;return 1;
}// 删除数据
int remove (SQL_LIST *L, int i)
{int j; // 判断顺序表是否为空,如果空,操作失败if (L->length == 0){return 0;}// 判断删除的位置是否合理,不合理,操作失败if (i < 1 || i > L->length){return 0;}// 从被删除元素开始,依次被后一个位置上的元素覆盖for (j = i - 1; j < L->length; j++){L->data[j] = L->data[j + 1];}// 顺序表长度减1L->length--;return 1;
}int main() {// 定义顺序表SQL_LIST list;// 对顺序表进行初始化init_list(&list);// 插入元素insert(&list, 1, 1);insert(&list, 2, 3);insert(&list, 3, 5);insert(&list, 4, 7);insert(&list, 5, 9);// 删除数据remove(&list, 2);// 展示顺序表show(&list);return 0;
}