实验名称:
线性表的删除操作
实验目的和要求
使用C语言中的数组,实现线性结构顺序存储的插入、删除、查找操作;
通过实验,更进一步理解掌握顺序表的插入、删除、查找算法的思想。熟练使用C语言编写程序,解决问题。
实验环境
VS2022
实验内容
1、初始线性表通过数组、循环、scanf语句实现输入任意个整数。
2、删除操作的实现,任意输入一个要删除的整数,找到这个元素,将此元素之后的所有元素逐个前移一位,实现删除操作。
3、要求以上2步操作可以重复执行。
4例如:删除操作执行结果大致如下:
请输入线性表初始长度:10
请任意输入长度为10的整型顺序表:1,3,5,7,9,2,4,6,8,0
请输入要删除的值: 4
删除之后为:1,3,5,7,9,2,6,8,0
请输入要删除的值:3
删除之后为:1,5,7,9,2,6,8,0
请输入要删除的值:23
删除之后为:查无此数。
……(可以继续执行)
5、当线性表中的数据数量已被删除至零时提示“线性表已空”。
代码实现:
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#define MAX_SIZE 100
void inputList(int list[], int* size) {
int n, i;
printf("请输入线性表的元素个数:");
scanf("%d", &n);
printf("请输入线性表的元素:");
for (i = 0; i < n; i++) {
scanf("%d", &list[i]);
}
*size = n;
}
void deleteElement(int list[], int* size, int target) {
int i, j, found = 0;
for (i = 0; i < *size; i++) {
if (list[i] == target) {
found = 1;
// 将后续元素依次前移
for (j = i; j < *size - 1; j++) {
list[j] = list[j + 1];
}
(*size)--;
break;
}
}
if (!found) {
printf("要删除的元素不存在!\n");
}
}
void displayList(int list[], int size) {
int i;
printf("当前线性表的元素:");
for (i = 0; i < size; i++) {
printf("%d ", list[i]);
}
printf("\n");
}
int main() {
int list[MAX_SIZE];
int size;
// 输入线性表
inputList(list, &size);
while (1) {
int target;
printf("请输入要删除的元素:");
scanf("%d", &target);
deleteElement(list, &size, target);
displayList(list, size);
// 判断是否继续删除
char flag;
printf("是否继续删除?(Y/N)");
getchar(); // 消耗上一次输入后的换行符
scanf("%c", &flag);
if (flag == 'N' || flag == 'n') {
break;
}
}
return 0;
}