数据结构循环单链表C语言完整代码(尾插法)
时间: 2024-06-14 14:02:20 浏览: 113
C语言数据结构单链表的增删改查
数据结构中的循环单链表是一种特殊的链表,其中头节点的next指针指向尾节点,而尾节点的next指针又指向头节点,形成了一个环形结构。尾插法(pushing at the end)是向循环链表中添加新节点的一种常见方法,通常在链表为空或已知尾节点的情况下操作。
下面是一个使用C语言实现循环单链表尾插法的简单代码示例:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义链表节点结构体
typedef struct Node {
int data; // 数据域
struct Node* next; // 指向下一个节点的指针
} Node;
// 初始化链表为循环链表
Node* createCircularList() {
Node* head = NULL;
return head;
}
// 尾插法添加新节点
void insertAtEnd(Node** head, int data) {
Node* newNode = (Node*)malloc(sizeof(Node));
if (!newNode) {
printf("Memory allocation failed.\n");
return;
}
newNode->data = data;
newNode->next = *head;
if (*head == newNode) {
newNode->next = newNode; // 如果链表为空,形成环
} else {
for (Node* current = *head; current->next != *head; current = current->next) {
// 遍历直到找到头节点
}
current->next = newNode;
}
// 更新头节点
*head = newNode;
}
// 打印循环链表
void printCircularList(Node* head) {
if (head == NULL) {
printf("Empty list.\n");
return;
}
Node* current = head;
do {
printf("%d ", current->data);
current = current->next;
} while (current != head);
printf("\n");
}
int main() {
Node* head = createCircularList();
insertAtEnd(&head, 1);
insertAtEnd(&head, 2);
insertAtEnd(&head, 3);
printf("Circular linked list after insertion:\n");
printCircularList(head);
return 0;
}
```
阅读全文