网易首页 > 网易号 > 正文 申请入驻

【青鸟飞扬教育】“双向循环链表”学习总结和C语言代码实现!

0
分享至

双向循环链表

定义

双向循环链表和它名字的表意一样,就是把双向链表的两头连接,使其成为了一个环状链表。只需要将表中最后一个节点的next指针指向头节点,头节点的prior指针指向尾节点,链表就能成环儿,如图所示:



需要注意的是,虽然双向循环链表成环状,但本质上还是双向链表,因此在双向循环链表中,依然能够找到头指针和头节点等。双向循环链表和双向链表相比,唯一的不同就是双向循环链表首尾相连,其他都完全一样。

注意:因为我上面已经讲了双向链表,所以这里只注重讲他们的实现差异。另因为带头节点会更好操作,所以我的代码都有头节点。

1、双向循环链表的创建

初始化时需要将头节点的next和prior都指向自己。



//1、初始化双向循环链表(带头节点)Status initLinkList(LinkList *list){ //创建头节点 *list = malloc(sizeof(Node)); if (*list == NULL) { return ERROR; } //前驱和后继都指向自己 (*list)->prior = *list; (*list)->data = -1; (*list)->next = *list; printf("已初始化链表~\n"); return OK;}

2、遍历双向循环链表

注意它的尾节点的next不再是Null,而是头节点

//2、遍历双向循环链表void printfLinkLisk(LinkList list){ printf("遍历链表:\n"); if (list == NULL || list->next == list) { printf("这是一个空链表\n"); return; } LinkList p = list; //判断next是否全部正确 printf("根据next从前往后遍历:"); while (p->next != list) { printf("%d ",p->next->data); p = p->next; } printf("\n"); //判断prior是否全部正确 printf("根据prior从后往前遍历:"); while (p != list) { printf("%d ",p->data); p = p->prior; } printf("\n");}

3、根据索引位置添加节点

这里不需要判断尾节点的next是否为Null,因为它会指向头节点。

//3、根据索引位置插入数据至链表中Status insertLinkList(LinkList *list, int index, ElemType data){ if (list == NULL || index < 0) { return ERROR; } int i = 0; LinkList priorNode = *list; //判断插入的位置,这里开始位置是0,index超过链表长度则插入末尾 while (i < index && priorNode->next != *list) { priorNode = priorNode->next; i++; } LinkList newNode = malloc(sizeof(Node)); if (newNode == NULL) { return ERROR; } newNode->data = data; //插入操作共四步,看好了,别眨眼 //1.将priorNode->next节点的前驱指向新节点 priorNode->next->prior = newNode; //2.将新节点->next指向原来的priorNode->next newNode->next = priorNode->next; //3.将priorNode->next指向新节点 priorNode->next = newNode; //4.新节点的前驱指向priorNode newNode->prior = priorNode; return OK;}

4、根据索引位置删除节点

这里不需要判断尾节点的next是否为Null,因为它会指向头节点。

//4、根据索引位置删除节点Status deleteLinkListByIndex(LinkList *list, int index, ElemType *data){ if (*list == NULL || index < 0) { return ERROR; } LinkList locaNode = *list; int i = 0; //注意别删了头节点 while (i <= index) { locaNode = locaNode->next; if (locaNode == *list) { printf("没有这个你想要删除的节点\n"); return ERROR; } i++; } //开始删除,只需要做两步 locaNode->prior->next = locaNode->next; locaNode->next->prior = locaNode->prior; *data = locaNode->data; free(locaNode); return OK;}

5、根据存储的值删除节点

这里不需要判断尾节点的next是否为Null,因为它会指向头节点。

//5、根据存储的值删除节点Status deleteLinkListByData(LinkList *list, ElemType data){ if (*list == NULL) { return ERROR; } LinkList locaNode = (*list)->next; while (locaNode != *list) { if (locaNode->data == data) { break; } locaNode = locaNode->next; } if (locaNode == *list) { printf("没有这个你想要删除的节点\n"); return ERROR; } //开始删除,只需要做两步 locaNode->prior->next = locaNode->next; locaNode->next->prior = locaNode->prior; free(locaNode); return OK;}

6、根据值查找节点

尾节点的next可是头节点哦,找到它就是最后一个了。

//6、查找元素Status selectNode(LinkList list, ElemType data, LinkList *locaNode){ if (list == NULL) { return ERROR; } LinkList p = list->next; while (p != list) { if (p->data == data) { *locaNode = p; break; } p = p->next; } if (*locaNode == NULL) { printf("没有这个你想要的节点\n"); return ERROR; } else { return OK; }}

其它辅助代码

#include "stdlib.h"#define OK 1#define ERROR 0//元素类型typedef int ElemType;//状态类型typedef int Status;//定义节点结构体typedef struct Node { struct Node *prior; ElemType data; struct Node *next;} Node;typedef Node *LinkList;int main(int argc, const char * argv[]) { LinkList list; initLinkList(&list); for (int i = 0; i < 10; i ++) { insertLinkList(&list, i, i); } printfLinkLisk(list); int index, data; printf("输入你想插入的位置(从0开始)和存储的值:"); scanf("%d %d",&index,&data); insertLinkList(&list, index, data); printfLinkLisk(list); printf("输入你想删除的位置(从0开始):"); scanf("%d",&index); deleteLinkListByIndex(&list, index, &data); printfLinkLisk(list); printf("输入你想删除的节点的值(只删最前的那个):"); scanf("%d",&data); deleteLinkListByData(&list, data); printfLinkLisk(list); printf("\n"); return 0;}

输出结果:



特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
两次12+连胜联盟第一!骑士逆转三杀猛龙 加兰40+9巴恩斯准三双

两次12+连胜联盟第一!骑士逆转三杀猛龙 加兰40+9巴恩斯准三双

醉卧浮生
2025-01-10 10:23:25
梁朝伟董洁往事还能瞒多久?爆两人房间满地成人用品!

梁朝伟董洁往事还能瞒多久?爆两人房间满地成人用品!

派大星纪录片
2024-12-16 17:52:45
“敢打,我就敢送!”郭台铭叫嚣:若两岸开战,将向前线提供物资

“敢打,我就敢送!”郭台铭叫嚣:若两岸开战,将向前线提供物资

素年文史
2024-11-13 09:39:16
终于有比《悬崖》好看的谍战剧,于和伟富大龙领衔,此剧要火!

终于有比《悬崖》好看的谍战剧,于和伟富大龙领衔,此剧要火!

星宿影视鸭
2025-01-10 14:53:39
租来的奔驰又抵押 引发租赁公司和典当公司上演互相“偷车”闹剧

租来的奔驰又抵押 引发租赁公司和典当公司上演互相“偷车”闹剧

封面新闻
2025-01-10 16:00:08
国内6大保险公司宣告破产,你的保单怎么办?

国内6大保险公司宣告破产,你的保单怎么办?

小宇宙双色球
2025-01-02 11:55:48
现在才看明白,特朗普没在说大话?中国面对的敌人,比想象更危险

现在才看明白,特朗普没在说大话?中国面对的敌人,比想象更危险

吕喆有话说
2025-01-10 10:01:53
2024年山东财政十强县浮出水面,全省8个县区财力超100亿

2024年山东财政十强县浮出水面,全省8个县区财力超100亿

农村阿祖
2025-01-10 15:29:09
国色芳华:女演员长相多重要,看看32岁杨紫和28岁女二张雅钦便知

国色芳华:女演员长相多重要,看看32岁杨紫和28岁女二张雅钦便知

露珠聊影视
2025-01-09 20:53:57
突发!排管中心原主任李全强被查,任职期间创女排奥运史最差成绩

突发!排管中心原主任李全强被查,任职期间创女排奥运史最差成绩

南海浪花
2025-01-10 17:23:42
WTT多哈站激战正酣,钱天一力克金娜英,混双组合分别淘汰赛会头号和二号种子晋级

WTT多哈站激战正酣,钱天一力克金娜英,混双组合分别淘汰赛会头号和二号种子晋级

乒乓社交开球网
2025-01-09 23:22:28
985、211大学生抢当擦边博主,看完一天直播收入金额网友全酸了...

985、211大学生抢当擦边博主,看完一天直播收入金额网友全酸了...

浪花妈妈
2025-01-10 22:50:15
电诈组织为什么要给演员王星剃光头

电诈组织为什么要给演员王星剃光头

熊太行
2025-01-08 08:09:03
缅北女魔头魏榕:建立血牛库,别墅藏帅哥,不听话就赏“肉灵芝”

缅北女魔头魏榕:建立血牛库,别墅藏帅哥,不听话就赏“肉灵芝”

刀刃故事
2024-10-08 23:39:48
43岁范冰冰和男友人逛巴黎,亲密合影小巧依人,相濡以沫已20年

43岁范冰冰和男友人逛巴黎,亲密合影小巧依人,相濡以沫已20年

南城无双
2025-01-03 00:28:07
痛心!消息传来:两名大学生遇难

痛心!消息传来:两名大学生遇难

南国今报
2025-01-10 17:52:20
美企将彻底禁用中国CDN!我们网络会直接瘫痪?国产替代能否顶上

美企将彻底禁用中国CDN!我们网络会直接瘫痪?国产替代能否顶上

时时有聊
2025-01-10 10:54:43
温峥嵘:为考北影剃掉眉毛,隐婚生子20年,真正的娱乐圈清醒!

温峥嵘:为考北影剃掉眉毛,隐婚生子20年,真正的娱乐圈清醒!

娱乐白名单
2025-01-10 10:25:23
看完丝袜女生下泥潭,原来世界上还有这么奇怪的癖好?

看完丝袜女生下泥潭,原来世界上还有这么奇怪的癖好?

浪花妈妈
2025-01-09 22:20:27
仗打不下去了!连中方都没料到,俄突然做出特殊安排,舆论引爆

仗打不下去了!连中方都没料到,俄突然做出特殊安排,舆论引爆

绝对军评
2025-01-10 08:08:13
2025-01-10 23:48:49
原画在线课堂vv
原画在线课堂vv
一家有温度的原画教育机构
1298文章数 1关注度
往期回顾 全部

科技要闻

王啸:我看好应用层,一直没投基础大模型

头条要闻

独臂船长抵达全球最孤独地点尼莫点 离他最近处在太空

头条要闻

独臂船长抵达全球最孤独地点尼莫点 离他最近处在太空

体育要闻

28岁冷板凳!阿森西奥被抛售 千万年薪无人接

娱乐要闻

鬼鬼吴映洁未婚生女当妈

财经要闻

财政部发声!2025年财政政策将非常积极

汽车要闻

10万元级无图智驾 悦也PLUS全路况实测

态度原创

本地
健康
家居
亲子
数码

本地新闻

食味印象|来太原,先干了这碗牺汤!

抑郁症患者称好的“乌托邦”宝地

家居要闻

深浅搭配 放大视觉空间

亲子要闻

奶皮子是宝宝的最爱,好吃的摇头晃脑,宝宝:我为奶皮子代言

数码要闻

盘点CES 2025发布的5款最奇特产品!国产占三款

无障碍浏览 进入关怀版