用C语言实现双向循环链表初始化
时间: 2024-09-16 11:00:55 浏览: 49
双向循环链表-C语言实现.doc
在C语言中,双向循环链表是一种特殊的链表结构,其中每个节点都有两个指针,一个指向前一个节点,另一个指向后一个节点,形成了一个首尾相连的环形结构。下面是一个简单的例子展示了如何初始化一个双向循环链表:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义双向循环链表节点结构
typedef struct Node {
int data;
struct Node* prev; // 指向前一个节点
struct Node* next; // 指向后一个节点
} Node;
// 初始化双向循环链表函数
void initializeCircularDLL(Node** head) {
*head = (Node*)malloc(sizeof(Node)); // 分配内存给头结点
if (*head == NULL) { // 检查分配是否成功
printf("Memory allocation failed.\n");
return;
}
(*head)->data = 0; // 初始化头结点的数据
(*head)->prev = *head; // 链接形成环:头结点的前一个节点也是头结点
(*head)->next = *head; // 同样,头结点的下一个节点也是头结点
Node* current = *head; // 初始化当前节点为头结点
for (int i = 1; i < NUM_NODES; ++i) { // 根据需要设置其他节点,这里假设NUM_NODES是一个常量
Node* newNode = (Node*)malloc(sizeof(Node));
if (newNode == NULL) {
printf("Memory allocation failed.\n");
break;
}
newNode->data = i;
newNode->prev = current->next; // 新节点的前一个节点是当前节点的后一个节点
newNode->next = current; // 新节点的后一个节点是当前节点
current->next->prev = newNode; // 当前节点的后一个节点链接新节点
current = newNode; // 更新当前节点到新节点
}
}
// 使用示例
int main() {
Node* head = NULL;
initializeCircularDLL(&head);
// ... 进行链表操作
free(head); // 在不再使用链表后记得释放内存
return 0;
}
阅读全文