帮我写一个能初始化、建立、求表长、输出、插入、查找、删除的c语言线性表程序
时间: 2023-11-03 14:04:58 浏览: 88
#include <stdio.h>
#include <stdlib.h>
#define MAXSIZE 100 // 线性表的最大长度
// 定义线性表结构体
typedef struct {
int data[MAXSIZE]; // 存储元素的数组
int length; // 线性表的长度
} List;
// 初始化线性表
void initList(List *list) {
list->length = 0;
}
// 建立线性表
void createList(List *list) {
int i, n;
printf("请输入线性表的长度:");
scanf("%d", &n);
if (n > MAXSIZE) {
printf("线性表长度超过了最大长度!\n");
exit(-1);
}
printf("请输入%d个元素:\n", n);
for (i = 0; i < n; i++) {
scanf("%d", &list->data[i]);
}
list->length = n;
printf("线性表创建成功!\n");
}
// 求线性表的长度
int getLength(List list) {
return list.length;
}
// 输出线性表
void printList(List list) {
int i;
printf("线性表的元素为:");
for (i = 0; i < list.length; i++) {
printf("%d ", list.data[i]);
}
printf("\n");
}
// 插入元素
void insertElem(List *list, int pos, int elem) {
int i;
if (pos < 1 || pos > list->length + 1) {
printf("插入位置不合法!\n");
exit(-1);
}
if (list->length >= MAXSIZE) {
printf("线性表已满,无法插入元素!\n");
exit(-1);
}
for (i = list->length - 1; i >= pos - 1; i--) {
list->data[i + 1] = list->data[i];
}
list->data[pos - 1] = elem;
list->length++;
printf("插入成功!\n");
}
// 查找元素
int searchElem(List list, int elem) {
int i;
for (i = 0; i < list.length; i++) {
if (list.data[i] == elem) {
return i + 1;
}
}
return -1;
}
// 删除元素
void deleteElem(List *list, int pos) {
int i;
if (pos < 1 || pos > list->length) {
printf("删除位置不合法!\n");
exit(-1);
}
for (i = pos; i < list->length; i++) {
list->data[i - 1] = list->data[i];
}
list->length--;
printf("删除成功!\n");
}
int main() {
List list;
int choice, pos, elem;
initList(&list);
while (1) {
printf("请选择要进行的操作:\n");
printf("1. 建立线性表\n");
printf("2. 求线性表的长度\n");
printf("3. 输出线性表\n");
printf("4. 插入元素\n");
printf("5. 查找元素\n");
printf("6. 删除元素\n");
printf("0. 退出程序\n");
scanf("%d", &choice);
switch (choice) {
case 0:
printf("程序已退出!\n");
exit(0);
case 1:
createList(&list);
break;
case 2:
printf("线性表的长度为:%d\n", getLength(list));
break;
case 3:
printList(list);
break;
case 4:
printf("请输入插入位置和元素值(用空格隔开):");
scanf("%d%d", &pos, &elem);
insertElem(&list, pos, elem);
break;
case 5:
printf("请输入要查找的元素值:");
scanf("%d", &elem);
pos = searchElem(list, elem);
if (pos == -1) {
printf("线性表中不存在该元素!\n");
} else {
printf("元素%d在线性表中的位置为:%d\n", elem, pos);
}
break;
case 6:
printf("请输入要删除的元素位置:");
scanf("%d", &pos);
deleteElem(&list, pos);
break;
default:
printf("输入的选项不合法,请重新输入!\n");
break;
}
}
return 0;
}
阅读全文