请解释如何用C语言实现双向链表,并给出插入和删除节点的详细代码示例。
时间: 2024-10-27 20:17:07 浏览: 46
双向链表是一种复杂的线性数据结构,每个节点都包含数据域和两个指针域,分别指向前一个节点和后一个节点。C语言实现双向链表时,通常会先定义节点的数据结构,然后实现插入和删除节点的函数。以下是一个示例实现:
参考资源链接:[严蔚敏数据结构完全C语言代码实现源码包](https://wenku.csdn.net/doc/4kcj03698a?spm=1055.2569.3001.10343)
首先定义双向链表节点结构体:
```c
typedef struct Node {
int data; // 数据域
struct Node *prev; // 指向前一个节点的指针
struct Node *next; // 指向后一个节点的指针
} Node;
```
接下来实现双向链表的初始化函数:
```c
Node* initNode(int data) {
Node *newNode = (Node*)malloc(sizeof(Node));
if (newNode == NULL) {
exit(1); // 内存分配失败,退出程序
}
newNode->data = data;
newNode->prev = newNode->next = newNode;
return newNode;
}
```
插入节点函数,分为在链表头部插入和在指定节点后插入:
```c
// 在双向链表头部插入节点
void insertHead(Node **head, int data) {
Node *newNode = initNode(data);
if (*head == NULL) {
*head = newNode;
} else {
newNode->next = *head;
(*head)->prev = newNode;
*head = newNode;
}
}
// 在双向链表的指定节点后插入节点
void insertAfter(Node *prevNode, int data) {
if (prevNode == NULL) {
printf(
参考资源链接:[严蔚敏数据结构完全C语言代码实现源码包](https://wenku.csdn.net/doc/4kcj03698a?spm=1055.2569.3001.10343)
阅读全文