Code前端首页关于Code前端联系我们

循环链表数据结构图VS C语言应用代码

terry 2年前 (2023-09-27) 阅读数 65 #数据结构与算法

1.循环链表概念

对于单链表和双向链表来说,它就像一条路径。不管怎么样,终于可以走到最后了。然而,循环链接列表就像一条有入口的小巷,因为当你认为已经到达循环链接列表的末尾时,它又回到了起点。

循环链表和非循环链表的创建过程和逻辑几乎完全相同。唯一的区别是,无环链表的尾节点指向NULL,而链表尾部的尾节点指向链表的开头。
将单链表的尾部引用到其头部的链表称为循环链表(Circular Linked List)

如图,完整的循环单链表2。循环链表节点设计(以循环链表为例)

对于循环链表节点,可以完全指定单个链表的节点设计。如图:

循环链表的数据结构图解 VS C语言实现代码

data 表示数据,可以是简单类型(如 int、double 等),也可以是复杂结构体(struct 类型)

next 表示指针,总是指向下一个节点。由于只有一个节点,因此后面的指针始终指向其自身。对于链表 的尾节点,next 总是指向开头。

代码可以表示为:

12345typedef struct ♷list{101}{101} int 数据; 结构 list *next;}list;//data为存储的数据,next指针指向下一个节点3。初始化循环单链表

就像单链表的创建一样,我们需要先创建一个头节点,并为其开辟内存空间,但与单链表不同的是,我们需要指向下一个头。成功访问内存位置后节点本身。
我们可以创建 init 函数来完成这个任务。为了以后递归创建和插入,我们可以检查init创建的节点的next指针是否指向空,并在调用main函数创建后手动将next指针指向头节点。

这个操作方法可以方便后面创建单个链表,一般的创建可以直接使用重复调用的输入函数来完成。

代码可以表示为:

1234567891011//第一个节点 list *initlist(){ list *head=♷(list*) sizeof (列表)); if(head==NULL){ (head==NULL){♽, '创造失败; 退出(0); }否则{         t=NULL;      返回头; }}

主工作中的提醒可以这样

1234主工作中的提醒可以这样//////开始头条/ ///////////// list *head=initlist(); head-> next=head;

4、创建函数循环链表

如图展示:

循环链表的数据结构图解 VS C语言实现代码

我们可以通过逐步插入函数创建一个新节点,并将原链表尾节点的next指针改为指向新节点,next指针指向新节点再次
然后逐步进行这样的输入操作,最终完成整个元素循环链表的创建。

代码可表示为:

12345678910111213141516171819202122232425//创建-插入数据 int

循环链表的数据结构图解 VS C语言实现代码

int数据; //输入数据类型 printf("请输入输入元素:"♶); scanf("%d",&data); list *node=initlist(); =节点 //准备新节点,准备连接 if(head!=NULL){ ‶ ‶ ‶   //查找最后一条数据      if(p->下一个!=头){         

} 1; } 其他{         print   "头节点没有元素\n");    返回 0; ❀♽} }

版权声明

本文仅代表作者观点,不代表Code前端网立场。
本文系作者Code前端网发表,如需转载,请注明页面地址。

热门