用C语言,编程实现线性表两种存储结构中的基本操作的实现(线性表的创建、插入、删除、查找、退出),并设计一个主菜单完成各个功能的调用。
时间: 2024-11-05 17:25:04 浏览: 21
在C语言中,我们可以使用数组和链表这两种常见的数据结构来实现线性表。这里我将简要描述这两种情况下的基本操作:
**一、数组实现**
```c
typedef struct {
int data[10]; // 假设线性表长度固定为10
int size;
} ArrayList;
// 创建数组列表
ArrayList* createArrayList() {
ArrayList* list = (ArrayList*)malloc(sizeof(ArrayList));
list->size = 0;
return list;
}
// 插入元素
void insertToArray(ArrayList* list, int value) {
if (list->size < sizeof(list->data)) {
list->data[list->size++] = value;
} else {
printf("数组已满,无法插入。\n");
}
}
// 删除元素
int deleteFromArray(ArrayList* list, int index) {
if (index >= 0 && index < list->size) {
int removedValue = list->data[index];
list->data[index] = list->data[--list->size];
return removedValue;
}
return -1; // 没有找到指定索引
}
// 查找元素
int searchArray(ArrayList* list, int value) {
for (int i = 0; i < list->size; i++) {
if (list->data[i] == value) {
return i;
}
}
return -1; // 没有找到
}
// 主菜单
void mainMenu(ArrayList* list) {
while (1) {
printf("\n1. 插入\n2. 删除\n3. 查找\n4. 退出\n");
int choice;
scanf("%d", &choice);
switch (choice) {
case 1:
int value;
printf("请输入值:");
scanf("%d", &value);
insertToArray(list, value);
break;
// ...其他选项的处理...
case 4:
free(list);
exit(0); // 退出程序
default:
printf("无效选择,试试看其它功能吧。\n");
}
}
}
```
**二、链表实现**
```c
typedef struct Node {
int data;
struct Node* next;
} ListNode;
// 创建链表
ListNode* createLinkedList() {
return NULL;
}
// 插入节点
void insertToLinkedList(ListNode** head, int value) {
ListNode* newNode = (ListNode*)malloc(sizeof(ListNode));
newNode->data = value;
newNode->next = *head;
*head = newNode;
}
// 删除节点
void deleteFromLinkedList(ListNode** head, int value) {
ListNode* curr = *head;
while (curr != NULL && curr->data != value) {
curr = curr->next;
}
if (curr != NULL) {
ListNode* temp = curr->next;
free(curr);
*head = temp;
}
}
// 查找节点
ListNode* searchLinkedList(ListNode* head, int value) {
ListNode* curr = head;
while (curr != NULL) {
if (curr->data == value) {
return curr;
}
curr = curr->next;
}
return NULL;
}
// 主菜单
void mainMenu(ListNode* head) {
// ...类似数组版本的主菜单,这里不再赘述
}
```
记得为上述函数添加错误检查和适当的错误处理。主菜单部分的细节可以根据需求自行扩展。
阅读全文