C语言因其接近硬件的特性和高效性,在系统编程、嵌入式开发等领域仍然占据着不可替代的地位。链表作为一种基础且重要的数据结构,在C语言中的应用非常广泛。通过对比以下三个程序,我们可以深入理解C语言中单链表、双向链表和多种链表操作(如增加、删除、查找、修改等)的实现方法。
程序一:单链表基础操作
主要功能
- 新建节点:动态分配内存空间,初始化节点数据。
- 插入节点:遍历到链表末尾,将新节点插入。
- 打印链表:顺序遍历链表,打印节点数据。
技术要点
- 使用
malloc
分配内存。 - 通过
while
循环遍历链表。 - 使用头节点简化插入和删除操作。
#include <stdio.h>
#include <stdlib.h>
typedef struct Node {
int data;
struct Node* next;
} Node;
// 新建节点
Node* createNode(int data) {
Node* newNode = (Node*)malloc(sizeof(Node));
if(newNode == NULL) {
fprintf(stderr, "OutOfMemory");
exit(EXIT_FAILURE);
}
newNode->data = data;
newNode->next = NULL;
return newNode;
}
// 插入节点
void insertNode(Node* head, int data) {
Node* currentNode = head;
while(currentNode->next != NULL) {
currentNode = currentNode->next;
}
currentNode->next = createNode(data);
}
// 打印链表
void printList(Node* head) {
Node* currentNode = head->next; // 跳过头结点
while(currentNode != NULL) {
printf("%d -> ", currentNode->data);
currentNode = currentNode->next;
}
printf("NULL\n");
}
int main() {
// 创建带头结点的单链表
Node* head = createNode(0); // 头结点,通常头结点的值不被使用
// 向链表中加入数据
for(int i = 1; i <= 10; i++) {
insertNode(head, i);
}
// 打印链表
printList(head);
return 0;
}
程序二:链表的增删改查
主要功能
- 初始化:创建带有头节点的空链表。
- 插入:在指定位置插入新节点。
- 删除:删除指定位置的节点。
- 查找ÿ