C实现双链表

本文介绍了如何使用C语言实现双链表,包括初始化链表、添加元素、搜索元素和删除元素的功能。通过定义`struct node`和`struct list`来结构化链表,并提供相应的静态函数进行操作。链表的初始化涉及哨兵节点的创建,添加元素时考虑了链表的最大容量限制,搜索元素和删除元素则通过遍历链表完成。

链表带以下功能:

 

1. 初始化链表:创建一个哨兵节点,链表头指向哨兵节点;

2. 添加元素:添加的元素加到链表尾部;

3. 搜索元素:遍历链表,寻找第一个匹配的节点,若找到,返回该节点的指针,若找不到,返回0;

5. 删除元素: 删除匹配的第一个节点。

头文件:

 

源文件:

 

 

以下是一个用 C 语言实现双向链表从小到大排序的代码示例: ```c #include <stdio.h> #include <stdlib.h> // 定义双向链表节点结构 typedef struct Node { int data; struct Node* prev; struct Node* next; } Node; // 创建新节点 Node* createNode(int data) { Node* newNode = (Node*)malloc(sizeof(Node)); newNode->data = data; newNode->prev = NULL; newNode->next = NULL; return newNode; } // 插入节点到链表尾部 void insertNode(Node** head, int data) { Node* newNode = createNode(data); if (*head == NULL) { *head = newNode; return; } Node* temp = *head; while (temp->next != NULL) { temp = temp->next; } temp->next = newNode; newNode->prev = temp; } // 交换两个节点的数据 void swap(Node* a, Node* b) { int temp = a->data; a->data = b->data; b->data = temp; } // 对双向链表进行冒泡排序 void sortList(Node* head) { int swapped; Node* ptr1; Node* lptr = NULL; if (head == NULL) return; do { swapped = 0; ptr1 = head; while (ptr1->next != lptr) { if (ptr1->data > ptr1->next->data) { swap(ptr1, ptr1->next); swapped = 1; } ptr1 = ptr1->next; } lptr = ptr1; } while (swapped); } // 打印链表 void printList(Node* head) { Node* temp = head; while (temp != NULL) { printf("%d ", temp->data); temp = temp->next; } printf("\n"); } int main() { Node* head = NULL; insertNode(&head, 5); insertNode(&head, 3); insertNode(&head, 8); insertNode(&head, 1); insertNode(&head, 4); printf("排序前的链表: "); printList(head); sortList(head); printf("排序后的链表: "); printList(head); return 0; } ``` ### 代码解释: 1. **节点结构**:定义了一个双向链表的节点结构,包含数据、指向前一个节点的指针和指向后一个节点的指针。 2. **创建节点**:`createNode` 函数用于创建一个新的节点。 3. **插入节点**:`insertNode` 函数将新节点插入到链表的尾部。 4. **交换节点数据**:`swap` 函数用于交换两个节点的数据。 5. **排序链表**:`sortList` 函数使用冒泡排序算法对链表进行排序。 6. **打印链表**:`printList` 函数用于打印链表中的所有节点数据。 ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值