单向循环链表:
单链表通过首尾连接可以构成单向循环链表
文章图片
双向循环链表:
双向链表进行首尾连接
文章图片
当问题中涉及到需要 "循环往复" 地遍历表中数据时,就需要使用双向循环链表。
创建双向链表:
//创建双向循环链表
line* initLine(line * head){
head=(line*)malloc(sizeof(line));
head->prior=NULL;
head->next=NULL;
head->data=https://www.it610.com/article/1;
line * list=head;
for (int i=2;
i<=3;
i++) {
line * body=(line*)malloc(sizeof(line));
body->prior=NULL;
body->next=NULL;
body->data=https://www.it610.com/article/i;
list->next=body;
body->prior=list;
list=list->next;
}
//通过以上代码,已经创建好双线链表,接下来将链表的首尾节点进行双向连接
list->next=head;
head->prior=list;
return head;
}
通过向 main 函数中调用 initLine 函数,就可以成功创建一个存储有
{1,2,3}
数据的双向循环链表,#include
#include
typedef struct line{
struct line * prior;
int data;
struct line * next;
}line;
line* initLine(line * head);
void display(line * head);
int main() {
line * head=NULL;
head=initLine(head);
display(head);
return 0;
}
//创建双向循环链表
line* initLine(line * head){
head=(line*)malloc(sizeof(line));
head->prior=NULL;
head->next=NULL;
head->data=https://www.it610.com/article/1;
line * list=head;
for (int i=2;
i<=3;
i++) {
line * body=(line*)malloc(sizeof(line));
body->prior=NULL;
body->next=NULL;
body->data=https://www.it610.com/article/i;
list->next=body;
body->prior=list;
list=list->next;
}
//通过以上代码,已经创建好双线链表,接下来将链表的首尾节点进行双向连接
list->next=head;
head->prior=list;
return head;
}
//输出链表的功能函数
void display(line * head){
line * temp=head;
//由于是循环链表,所以当遍历指针temp指向的下一个节点是head时,证明此时已经循环至链表的最后一个节点
while (temp->next!=head) {
if (temp->next==NULL) {
printf("%d\n",temp->data);
}else{
printf("%d->",temp->data);
}
temp=temp->next;
}
//输出循环链表中最后一个节点的值
printf("%d",temp->data);
}
输出结果:
【#|数据结构-双向循环链表】
文章图片
推荐阅读
- #|数据结构-双向链表操作
- Python每日一练|Python每日一练(牛客新题库)——第20天(字典练习)
- #|【电子器件笔记7】MOS管参数和选型
- #|【MMDetection 源码解读之yolov3】Backbone - Darknet53.
- 数据结构与算法|『数据结构与算法』之时间复杂度与空间复杂度,看这一篇就够啦
- #|pandas的简单使用(数据统计)
- #|深度学习之 11 空洞卷积的实现
- #|vue使用 APlayer+Meting实现音乐播放,支持多平台音乐(网易云、腾讯、虾米、酷狗、百度)
- #|Spring|SpringMVC的请求和响应以及文件上传