用C语言,编程实现线性表两种存储结构中的基本操作的实现(线性表的创建 插入、删除和查找),并设计一个主菜单完成各个功能的调用。要求放在一起,一个完整的程序
时间: 2024-11-06 07:35:35 浏览: 22
在C语言中,线性表的两种常见存储结构是顺序存储和链式存储。这里我会简单地介绍这两种存储结构下线性表的基本操作的实现,并提供一个简单的主菜单。
**1. 顺序存储 (数组)**:
```c
#include <stdio.h>
// 定义线性表节点结构体
typedef struct {
int data;
int next; // 如果是单链表,则next指向下个元素
} Node;
// 功能函数
void createArrayList(int n) {
Node* arr = malloc(n * sizeof(Node));
for (int i = 0; i < n; i++) {
arr[i].data = 0; // 初始化数据为0
arr[i].next = i + 1;
}
arr[n - 1].next = -1; // 链表结束标记
}
// 插入操作
void insertArrayList(int pos, int value, Node* arr) {
if (pos <= 0 || pos > n)
return;
for (int i = n - 1; i >= pos; i--) {
arr[i].data = arr[i - 1].data;
}
arr[pos - 1].data = value;
}
// 删除操作
void deleteArrayList(int pos, Node* arr) {
if (pos <= 0 || pos > n)
return;
for (int i = pos; i < n - 1; i++)
arr[i] = arr[i + 1];
arr[n - 1] = (Node){0, -1}; // 更新链表结束标记
}
// 查找操作
int searchArrayList(int value, Node* arr) {
for (int i = 0; i < n; i++)
if (arr[i].data == value)
return i;
return -1;
}
```
**2. 链式存储 (单链表)**:
```c
typedef struct ListNode {
int data;
struct ListNode* next;
} ListNode;
// 创建链表头结点
ListNode* createLinkedList() {
ListNode* head = (ListNode*)malloc(sizeof(ListNode));
head->data = 0;
head->next = NULL;
return head;
}
// 等同于上面的操作...
void insertLinkedList(int pos, int value, ListNode* list);
void deleteLinkedList(int pos, ListNode* list);
int searchLinkedList(int value, ListNode* list);
```
**主菜单:**
```c
#include "array_list.c" // 或者 include "link_list.c"
int main() {
int choice, pos, value;
while (1) {
printf("1. 创建数组列表\n2. 创建链表\n");
// 其他选项如插入、删除和查找等
scanf("%d", &choice);
switch (choice) {
case 1:
// 调用数组操作函数
break;
case 2:
// 调用链表操作函数
break;
default:
printf("无效选择,退出程序...\n");
break;
}
// 添加其他菜单选项的功能调用
}
return 0;
}
```
阅读全文