目录
🌟1什么是单向循环链表?
单向循环链表对比单链表,其实只有一个地方的差异,那就是:
尾结点的指针域不是指向空,而是指向了头结点,使其形成了一个环。
💓2好处是什么呢?
链表从链尾到链头很方便,当要处理的数据元素序列具有环形结构特点的时候,适合于采⽤循环链表。
🌵3操作的差异
分类:和单链表相同,循环链表也分为带头结点结构和不带头结点结构两种,同样带头结点的循环单链表实现插⼊和删除操作的时候,算法实现⽐较⽅便。
实现⽅法与单链表基本相同,唯⼀的差别在:
- 在初始化中,head->next = head
- 在需要用到循环条件的函数中,把循环条件!=NULL,改成!=head
⚽4代码
只给出了初始化、头插法与输出的代码,其余代码与单链表基本相同,可以参考以下链接:
单链表(完整C代码)https://blog.csdn.net/weixin_54186646/article/details/123312019?spm=1001.2014.3001.5501
#include<stdio.h>
#include<stdlib.h>
typedef struct OnewayCircularLinkList
{
int data;
struct OnewayCircularLinkList *next;
}LinkList;
LinkList* InitList()
{
LinkList* node = (LinkList*)malloc(sizeof(LinkList));
//头结点数据域可用于存储结点个数
node->data = 0;
//最后一个结点的指针域不为NULL,为头节点,构成了循环
node->next = node;
}
void HeadInsert(LinkList* head,int n)
{
LinkList* node = (LinkList*)malloc(sizeof(LinkList));
node->data = n;
node->next = head->next;
head->next = node;
head->data++;
}
void show(LinkList* node)
{
LinkList* temp = (LinkList*)malloc(sizeof(LinkList));
temp = node->next;
while (temp != node)
{
printf("%d", temp->data);
temp = temp->next;
}
}
int main()
{
LinkList* head = InitList();
HeadInsert(head, 1);
HeadInsert(head, 2);
show(head);
return 0;
}