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

【青鸟飞扬教育】“双向循环链表”学习总结和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.

相关推荐
热点推荐
俄罗斯最大武器库遭乌军攻击,3万吨弹药殉爆,蘑菇云冲天而起

俄罗斯最大武器库遭乌军攻击,3万吨弹药殉爆,蘑菇云冲天而起

安安说
2024-09-19 00:15:44
高校38岁副教授张祺乐逝世!死因曝光,昔日学生透露其私下人品

高校38岁副教授张祺乐逝世!死因曝光,昔日学生透露其私下人品

六毛朵朵
2024-09-18 09:55:34
出生率为什么一直下降?真相很惊人!你懂的。

出生率为什么一直下降?真相很惊人!你懂的。

猫小狸同学
2024-09-18 13:20:03
广东中山开始出现洗房。很多父母都慌了,不少家庭也受到了影响

广东中山开始出现洗房。很多父母都慌了,不少家庭也受到了影响

小虎新车推荐员
2024-09-18 20:39:32
短短96小时,美国连下25道挑战书,中美斗争已质变,更大风暴来临

短短96小时,美国连下25道挑战书,中美斗争已质变,更大风暴来临

影孖看世界
2024-09-16 23:07:34
谈个高个子女生是什么体验?身体真的遭不住啊。

谈个高个子女生是什么体验?身体真的遭不住啊。

有趣的火烈鸟
2024-09-09 07:22:09
中断与中国合作后,阿联酋AI公司G42获得英伟达AI芯片采购许可

中断与中国合作后,阿联酋AI公司G42获得英伟达AI芯片采购许可

芯智讯
2024-09-18 09:29:51
韩国瑜拒绝配合吴思瑶演戏,傅崐萁、黄国昌默契散会离开!

韩国瑜拒绝配合吴思瑶演戏,傅崐萁、黄国昌默契散会离开!

牛锅巴小钒
2024-09-18 21:53:24
斯坦福全球前2%顶尖科学家出炉,清华第一,浙大第二,华科第五

斯坦福全球前2%顶尖科学家出炉,清华第一,浙大第二,华科第五

东东趣谈
2024-09-18 21:53:59
微软 Office 2024 全新登场,备受瞩目

微软 Office 2024 全新登场,备受瞩目

科技的视界
2024-09-19 00:05:45
以军总参谋长:以色列在战争中还拥有许多尚未使用的能力

以军总参谋长:以色列在战争中还拥有许多尚未使用的能力

国际在线
2024-09-19 06:12:07
爸爸送女儿开学,被嘲“破双非”毕业就失业,身份曝光对方破防了

爸爸送女儿开学,被嘲“破双非”毕业就失业,身份曝光对方破防了

妍妍教育日记
2024-09-17 19:41:47
苍天饶过谁!拒唱国歌否认中国籍,俩儿子落户国外,她现状如何?

苍天饶过谁!拒唱国歌否认中国籍,俩儿子落户国外,她现状如何?

吾爱纪实
2024-09-10 17:03:05
河南郑州一女子2万购金镯,保养时被鉴定为假,周大生:坐等起诉

河南郑州一女子2万购金镯,保养时被鉴定为假,周大生:坐等起诉

娱乐洞察点点
2024-09-18 18:11:28
支奴干直升机,在我国停了近50年,为何没成

支奴干直升机,在我国停了近50年,为何没成

打出自己一片天
2024-09-19 06:02:23
苹果向 AirPods 4 / Pro 2 耳机推送新固件 7A304/7A302

苹果向 AirPods 4 / Pro 2 耳机推送新固件 7A304/7A302

IT之家
2024-09-19 06:47:06
刘强东,接盘百亿达达

刘强东,接盘百亿达达

21世纪商业评论
2024-09-18 23:27:26
巴乔悼念斯基拉奇:再见我的朋友,90世界杯神奇之夜永留我心

巴乔悼念斯基拉奇:再见我的朋友,90世界杯神奇之夜永留我心

直播吧
2024-09-18 19:19:09
外事不决问英国!英国做对了历史上所有的选择题

外事不决问英国!英国做对了历史上所有的选择题

读史
2024-09-16 07:00:00
拉比奥亏大了!750万年薪变250万,意甲4巨星闹离队,都自毁前途

拉比奥亏大了!750万年薪变250万,意甲4巨星闹离队,都自毁前途

球场没跑道
2024-09-18 11:34:51
2024-09-19 07:22:44
原画在线课堂vv
原画在线课堂vv
一家有温度的原画教育机构
852文章数 1关注度
往期回顾 全部

科技要闻

iPhone16系列国行体验:没AI仍是最强机?

头条要闻

美联储宣布降息50个基点 系2020年以来首次降息

头条要闻

美联储宣布降息50个基点 系2020年以来首次降息

体育要闻

只有6人的日本高中 打进全国大赛没钱去

娱乐要闻

中秋晚会删于适节目,吴京新片受影响

财经要闻

大幅降息50个基点!美联储开启降息周期

汽车要闻

功能多动力强 长安启源E07也太全面了!

态度原创

健康
旅游
手机
数码
家居

炉甘石洗剂,凭啥成了止痒全能王?

旅游要闻

2024上海崇明乡村文化旅游节即将开幕

手机要闻

iOS 18「抄袭」安卓,它还有竞争力吗?

数码要闻

x86颠覆性CPU!Intel Lunar Lake续航超M3:本地视频播放一整天

家居要闻

自在此间 一刻悠然

无障碍浏览 进入关怀版