请编制C程序,利用线性表的顺序存储方式实现下列功能,建立线性表、输出线性表、在线性表的第i个元素之前插入一个元素、删除线性表中第i个元素、在线性表中查找值为x的元素并返回查找结果。
时间: 2023-06-04 16:07:39 浏览: 124
好的,我可以帮您回答关于编写 C 语言程序的问题。以下是实现您列出的功能的 C 语言代码:
```
#include <stdio.h>
#include <stdlib.h>
#define MAXSIZE 100 // 线性表最大存储容量
typedef struct {
int elem[MAXSIZE]; // 存储元素的数组
int length; // 存储线性表的长度
} List;
// 初始化线性表
void InitList(List *L) {
L->length = 0;
}
// 输出线性表
void PrintList(List L) {
int i;
if (L.length == 0) {
printf("Empty list.\n");
return;
}
printf("List: ");
for (i = 0; i < L.length; i++) {
printf("%d ", L.elem[i]);
}
printf("\n");
}
// 插入元素
int InsertList(List *L, int i, int e) {
int j;
if (L->length == MAXSIZE) {
return -1; // 存储空间已满,无法插入
}
if (i < 1 || i > L->length + 1) {
return 0; // 插入位置无效
}
for (j = L->length - 1; j >= i - 1; j--) {
L->elem[j + 1] = L->elem[j]; // 将插入位置以及之后的元素全部向后移动一位
}
L->elem[i - 1] = e; // 将新的元素插入到插入位置
L->length++; // 线性表长度加 1
return 1; // 插入成功
}
// 删除元素
int DeleteList(List *L, int i) {
int j;
if (L->length == 0) {
return 0; // 线性表为空,无法删除
}
if (i < 1 || i > L->length) {
return -1; // 删除位置无效
}
for (j = i; j < L->length; j++) {
L->elem[j - 1] = L->elem[j]; // 将删除位置之后的元素全部向前移动一位
}
L->length--; // 线性表长度减 1
return 1; // 删除成功
}
// 查找元素
int LocateElem(List L, int x) {
int i;
for (i = 0; i < L.length; i++) {
if (L.elem[i] == x) {
return i + 1; // 返回元素的位置
}
}
return 0; // 没有找到对应元素
}
// 主函数,用于测试
int main() {
List L;
int i, e, choice;
while (1) {
printf("Please select:\n");
printf("1. Initialize list.\n");
printf("2. Print list.\n");
printf("3. Insert element.\n");
printf("4. Delete element.\n");
printf("5. Locate element.\n");
printf("0. Exit.\n");
printf("Your choice: ");
scanf("%d", &choice);
switch (choice) {
case 1:
InitList(&L);
printf("Initialized successfully.\n");
break;
case 2:
PrintList(L);
break;
case 3:
printf("Please enter the position and value of the element to be inserted: ");
scanf("%d %d", &i, &e);
if (InsertList(&L, i, e) == 1) {
printf("Element inserted successfully.\n");
}
else {
printf("Insertion failed.\n");
}
break;
case 4:
printf("Please enter the position of the element to be deleted: ");
scanf("%d", &i);
if (DeleteList(&L, i) == 1) {
printf("Element deleted successfully.\n");
}
else {
printf("Deletion failed.\n");
}
break;
case 5:
printf("Please enter the value of the element to be located: ");
scanf("%d", &e);
i = LocateElem(L, e);
if (i == 0) {
printf("Element not found.\n");
}
else {
printf("Element found at position %d.\n", i);
}
break;
case 0:
printf("Exit.\n");
exit(0);
default:
printf("Invalid choice.\n");
break;
}
}
return 0;
}
```
希望我的回答对您有所帮助!
阅读全文