C语言线性表代码实现
时间: 2024-08-15 14:06:01 浏览: 33
线性表是一种非常基本的数据结构,在C语言中可以有多种方式来实现,常见的有数组、链表等。
### 1. 数组
数组是最简单的线性表实现方式,它允许直接通过索引来访问元素,因此查找操作的时间复杂度通常为 O(1)。
#### 实现示例:
```c
#include <stdio.h>
#define MAX_SIZE 100
typedef struct {
int data[MAX_SIZE];
int count;
} Array;
void push(Array *list, int value);
int pop(Array *list);
int main() {
Array list = { .count = 0 };
push(&list, 5);
push(&list, 7);
printf("Popped element: %d\n", pop(&list));
return 0;
}
void push(Array *list, int value) {
if (list->count >= MAX_SIZE) {
printf("Error: Array is full.\n");
return;
}
list->data[list->count++] = value;
}
int pop(Array *list) {
if (list->count == 0) {
printf("Error: List is empty.\n");
return -1;
}
return list->data[--(list->count)];
}
```
### 2. 链表
链表分为单向链表和双向链表。每个节点包含数据以及对下一个节点的引用。链表的优势在于插入和删除操作相对简单,时间复杂度通常为 O(n),但在随机访问时效率较低。
#### 单向链表示例:
```c
#include <stdio.h>
#include <stdlib.h>
typedef struct Node {
int data;
struct Node *next;
} Node;
Node *createNode(int data);
void insert(Node **head, int value);
void remove(Node **head, int value);
void printList(const Node *head);
int main() {
Node *head = NULL;
insert(&head, 3);
insert(&head, 6);
insert(&head, 9);
printList(head);
remove(&head, 6);
printList(head);
return 0;
}
Node *createNode(int data) {
Node *newNode = (Node *)malloc(sizeof(Node));
newNode->data = data;
newNode->next = NULL;
return newNode;
}
void insert(Node **head, int value) {
Node *newNode = createNode(value);
if (*head == NULL) {
*head = newNode;
} else {
Node *temp = *head;
while (temp->next != NULL) {
temp = temp->next;
}
temp->next = newNode;
}
}
void remove(Node **head, int value) {
if (*head == NULL) return;
Node *temp = *head;
if (temp->data == value) {
*head = temp->next;
free(temp);
return;
}
while (temp->next != NULL && temp->next->data != value) {
temp = temp->next;
}
if (temp->next != NULL) {
Node *nodeToDelete = temp->next;
temp->next = nodeToDelete->next;
free(nodeToDelete);
}
}
void printList(const Node *head) {
while (head != NULL) {
printf("%d -> ", head->data);
head = head->next;
}
printf("NULL\n");
}
```
### 相关问题:
1. 为什么选择使用数组还是链表作为线性表的实现?
2. 数组和链表之间有哪些区别和优缺点?
3. 在哪种场景下更适合使用链表而不是数组?
这些实现示例展示了如何分别使用数组和链表来实现线性表的基本操作,包括添加、删除和访问元素。在实际应用中,应根据特定需求和性能考量来选择合适的数据结构。
相关推荐
![docx](https://img-home.csdnimg.cn/images/20210720083331.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)