请编制c语言程序,利用顺序存储方式实现下列功能:根据键盘输入数据建立一个线性表,并输出该线性表;然后根据屏幕菜单的选择,可以进行数据的插入、删除、查找,并在插入或删除数据后,再输出线性表;最后在屏幕菜单中选择结束按钮,即可结束程序的运行。
时间: 2024-03-20 13:42:49 浏览: 111
好的,下面是C语言程序的代码实现:
```c
#include <stdio.h>
#include <stdlib.h>
#define MAXSIZE 100 // 定义线性表最大长度
typedef struct {
int data[MAXSIZE]; // 存储线性表数据元素
int length; // 线性表长度
} SqList; // 顺序存储结构体定义
// 初始化线性表
void InitList(SqList *L) {
L->length = 0;
}
// 插入数据
int ListInsert(SqList *L, int i, int e) {
int j;
if (i < 1 || i > L->length + 1) { // 判断插入位置是否合法
return 0;
}
if (L->length >= MAXSIZE) { // 判断线性表是否已满
return 0;
}
for (j = L->length; j >= i; j--) {
L->data[j] = L->data[j-1]; // 后面的数据元素向后移动一位
}
L->data[i-1] = e; // 插入新数据元素
L->length++; // 线性表长度加1
return 1;
}
// 删除数据
int ListDelete(SqList *L, int i) {
int j;
if (i < 1 || i > L->length) { // 判断删除位置是否合法
return 0;
}
for (j = i; j < L->length; j++) {
L->data[j-1] = L->data[j]; // 后面的数据元素向前移动一位
}
L->length--; // 线性表长度减1
return 1;
}
// 查找数据
int LocateElem(SqList *L, int e) {
int i;
for (i = 0; i < L->length; i++) {
if (L->data[i] == e) {
return i+1; // 返回数据元素在线性表中的位置
}
}
return 0; // 数据元素不存在
}
// 输出线性表
void PrintList(SqList *L) {
int i;
printf("当前线性表的数据为:\n");
for (i = 0; i < L->length; i++) {
printf("%d ", L->data[i]);
}
printf("\n");
}
int main() {
SqList L; // 定义线性表
int choice, i, e;
InitList(&L); // 初始化线性表
printf("请输入线性表数据元素个数:");
scanf("%d", &L.length);
printf("请输入%d个数据元素:\n", L.length);
for (i = 0; i < L.length; i++) {
scanf("%d", &L.data[i]);
}
PrintList(&L); // 输出线性表
while (1) {
printf("请选择操作:\n");
printf("1. 插入数据\n");
printf("2. 删除数据\n");
printf("3. 查找数据\n");
printf("4. 结束程序\n");
scanf("%d", &choice);
switch (choice) {
case 1:
printf("请输入要插入的位置和数据元素:\n");
scanf("%d%d", &i, &e);
if (ListInsert(&L, i, e)) {
printf("数据插入成功!\n");
PrintList(&L);
} else {
printf("数据插入失败,请检查插入位置是否合法或线性表是否已满!\n");
}
break;
case 2:
printf("请输入要删除的位置:\n");
scanf("%d", &i);
if (ListDelete(&L, i)) {
printf("数据删除成功!\n");
PrintList(&L);
} else {
printf("数据删除失败,请检查删除位置是否合法!\n");
}
break;
case 3:
printf("请输入要查找的数据元素:\n");
scanf("%d", &e);
i = LocateElem(&L, e);
if (i) {
printf("数据元素%d在线性表中的位置为:%d\n", e, i);
} else {
printf("数据元素%d不存在!\n", e);
}
break;
case 4:
printf("程序已结束!\n");
exit(0); // 退出程序
default:
printf("无效操作,请重新选择!\n");
}
}
return 0;
}
```
该程序实现了线性表的建立、插入、删除、查找等操作,可以根据菜单进行操作选择,直到选择结束按钮退出程序。
阅读全文