C语言中编程实现线性表两种存储结构中的基本操作的实现(线性表的创建 、插入、删除和查找),并设计一个主菜单完成各个功能的调用。
时间: 2024-11-05 22:24:49 浏览: 11
线性表的基本操作之顺序存储结构实现
在C语言中,我们可以使用数组和链表这两种常见的数据结构来实现线性表。这里我会简单介绍如何实现这四种基本操作:
**1. 数组实现**
- **创建(初始化)**:
```c
typedef struct {
int *data;
int size;
int capacity;
} ArrayList;
ArrayList *createArray(int capacity) {
ArrayList *list = malloc(sizeof(ArrayList));
list->data = malloc(capacity * sizeof(int));
list->size = 0;
list->capacity = capacity;
return list;
}
```
- **插入(一般在末尾)**:
```c
void insertArray(ArrayList *list, int value) {
if (list->size == list->capacity) {
list->capacity *= 2; // 当满时扩大容量
list->data = realloc(list->data, list->capacity * sizeof(int));
}
list->data[list->size++] = value;
}
```
- **删除** 和 **查找**:
由于数组是连续存储的,直接通过索引访问即可,但在删除时需要注意更新其他元素的位置。
**2. 链表实现**
- **创建(单向链表为例)**:
```c
typedef struct Node {
int data;
struct Node* next;
} ListNode;
ListNode* createLinkedList() {
ListNode* head = NULL;
return head;
}
void insertLinkedList(ListNode** head, int value) {
ListNode* newNode = malloc(sizeof(ListNode));
newNode->data = value;
newNode->next = *head;
*head = newNode;
}
```
- **删除** 和 **查找**:
在链表中,需要遍历找到节点,然后调整前一个节点的`next`指针或释放节点。
**主菜单示例**:
```c
void mainMenu(ArrayList* array_list, ListNode* linked_list) {
int choice;
printf("1. 操作数组\n");
printf("2. 操作链表\n");
printf("选择操作(1/2): ");
scanf("%d", &choice);
switch (choice) {
case 1:
// 调用数组操作函数
break;
case 2:
// 调用链表操作函数
break;
default:
printf("无效的选择,退出程序。\n");
break;
}
}
```
阅读全文