顺序表基本操作的实现
一、实验目的:
建立顺序表存储数据序列(6,16,26,36,46,56,66,76,86,96),要求:
(1)输出顺序表中的所有元素;
(2)输出顺序表中的最大值和最小值;
(3)键盘输入一个数x,如x在表中返回其在表中的位序,不在返回相应提示信息。
(4)删除顺序表中的第5个元素,并输出顺序表中的所有元素;
(5)在第8个元素后面插入新元素88,并输出顺序表中的所有元素;
(6)输出顺序表的长度。
二、实验思路
主要实现了顺序表的基本操作,包括初始化顺序表、输出所有元素、输出最大值和最小值、查找元素位置、删除指定位置的元素、在指定位置后插入新元素、输出顺序表长度等功能。
代码中划分了几个关键函数:
InitList:初始化顺序表,包括动态分配内存空间和初始化长度为0。
PrintList:输出顺序表中的所有元素。
FindMaxMin:输出顺序表中的最大值和最小值。
LocateElem:查找顺序表中指定元素的位置。
DeleteElem:删除顺序表中指定位置的元素。
InsertElem:在顺序表中指定位置后插入新元素。
ListLength:输出顺序表的长度。
主函数则包含一个操作菜单,根据用户的选择调用相应的函数进行操作。用户可以选择输出所有元素、输出最大值和最小值、查找元素位置、删除元素、插入新元素、输出顺序表长度等操作,直到选择退出为止。
三、源代码
#include <stdio.h>
#define MAXSIZE 10
typedef struct {
int data[MAXSIZE]; // 顺序表存储数组
int length; // 当前顺序表长度
} SqList;
// 初始化顺序表
void InitList(SqList* L) {
L->length = 10; // 设置初始长度
int arr[10] = { 6, 16, 26, 36, 46, 56, 66, 76, 86, 96 };
for (int i = 0; i < L->length; i++) {
L->data[i] = arr[i];
}
}
// 输出顺序表的所有元素
void PrintList(SqList L) {
printf("顺序表中的所有元素为:");
for (int i = 0; i < L.length; i++) {
printf("%d ", L.data[i]);
}
printf("\n");
}
// 输出顺序表中的最大值和最小值
void FindMaxMin(SqList L) {
int max = L.data[0];
int min = L.data[0];
for (int i = 1; i < L.length; i++) {
if (L.data[i] > max) {
max = L.data[i];
}
if (L.data[i] < min) {
min = L.data[i];
}
}
printf("顺序表中的最大值为:%d,最小值为:%d\n", max, min);
}
// 查找元素位置
int LocateElem(SqList L, int x) {
for (int i = 0; i < L.length; i++) {
if (L.data[i] == x) {
return i;
}
}
return -1;
}
// 删除第n个元素
void DeleteElem(SqList* L, int n) {
if (n < 1 || n > L->length) {
printf("删除位置非法\n");
return;
}
for (int i = n; i < L->length; i++) {
L->data[i - 1] = L->data[i];
}
L->length--;
}
// 在第k个元素后插入新元素
void InsertElem(SqList* L, int k, int newnum) {
if (k < 0 || k >= L->length) {
printf("插入位置非法\n");
return;
}
for (int i = L->length; i > k; i--) {
L->data[i] = L->data[i - 1];
}
L->data[k + 1] = newnum;
L->length++;
}
// 输出顺序表的长度
void ListLength(SqList L) {
printf("顺序表的长度为:%d\n", L.length);
}
int main() {
SqList L;
int choice, x, pos;
InitList(&L);
do {
printf("\n***** 顺序表操作菜单 *****\n");
printf("1. 输出所有元素\n");
printf("2. 输出最大值和最小值\n");
printf("3. 查找元素位置\n");
printf("4. 删除第n个元素\n");
printf("5. 在第k个元素后插入新元素\n");
printf("6. 输出顺序表长度\n");
printf("0. 退出\n");
printf("请输入操作选项:");
scanf_s("%d", &choice);
switch (choice) {
case 1:
PrintList(L);
break;
case 2:
FindMaxMin(L);
break;
case 3:
printf("请输入一个数x:");
scanf_s("%d", &x);
pos = LocateElem(L, x);
if (pos != -1) {
printf("%d 在顺序表中的位序为:%d\n", x, pos + 1);
}
else {
printf("%d 不在顺序表中\n", x); }
break;
case 4:
printf("请输入要删除的元素位置n:");
int n;
scanf_s("%d", &n);
DeleteElem(&L, n);
PrintList(L);
break;
case 5:
printf("请输入要插入新元素的位置k和新元素值newnum:");
int k, newnum;
scanf_s("%d %d", &k, &newnum);
InsertElem(&L, k, newnum);
PrintList(L);
break;
case 6:
ListLength(L);
break;
case 0:
printf("程序已退出\n");
break;
default:
printf("非法输入,请重新选择\n");
}
} while (choice != 0);
return 0;
}
四、实验结果