写一个输出函数,将双向循环链表里的内容输出
时间: 2024-09-12 08:07:45 浏览: 50
C语言数据结构之双向循环链表的实例
5星 · 资源好评率100%
要输出双向循环链表中的内容,首先需要定义双向循环链表的节点结构,通常包括数据域、指向前一个节点的指针以及指向后一个节点的指针。然后编写一个函数来遍历这个链表,从任意节点开始,沿着链表遍历直到回到起始节点为止。下面是一个简单的示例代码,展示如何定义节点结构和输出函数:
```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));
if (newNode == NULL) {
exit(-1); // 内存分配失败
}
newNode->data = data;
newNode->prev = newNode; // 在双向循环链表中,新节点的前驱和后继指针指向自己
newNode->next = newNode;
return newNode;
}
// 向双向循环链表中添加节点
void appendNode(Node** head, int data) {
Node* newNode = createNode(data);
if (*head == NULL) {
*head = newNode;
} else {
Node* current = *head;
while (current->next != *head) {
current = current->next;
}
current->next = newNode;
newNode->prev = current;
}
}
// 输出双向循环链表中的内容
void printList(Node* head) {
if (head == NULL) {
printf("链表为空。\n");
return;
}
Node* current = head;
do {
printf("%d ", current->data);
current = current->next;
} while (current != head);
printf("\n");
}
int main() {
Node* head = NULL; // 初始化链表头指针为NULL
appendNode(&head, 1);
appendNode(&head, 2);
appendNode(&head, 3);
// 假设已经添加了多个节点
printList(head); // 输出链表内容
// 清理链表内存等操作...
return 0;
}
```
在上述代码中,首先定义了一个结构体`Node`来表示双向循环链表的节点,然后通过`createNode`函数创建新节点,通过`appendNode`函数向链表尾部添加新节点,最后通过`printList`函数遍历链表并输出每个节点的数据。
阅读全文