一郎科技|就靠这20+张图了,一口气搞懂「链表」( 六 )
}
}
通过将单链表的尾结点指向头结点的链表称之为循环单链表(Circularlinkedlist)
一个完整的循环单链表如图:
next表示指针 , 它总是指向自身的下一个结点 , 对于只有一个结点的存在 , 这个next指针则永远指向自身 , 对于一个链表的尾部结点 , next永远指向开头 。
其代码如下:
typedefstructlist{
intdata;
structlist*next;
}list;
//data为存储的数据 , next指针为指向下一个结点
循环单链表初始化先创建一个头结点并且给其开辟内存空间 , 在开辟内存空间成功之后 , 将头结点的next指向head自身 , 创建一个init函数来完成;
为了重复创建和插入 , 我们可以在init函数重新创建的结点next指向空 , 而在主函数调用创建之后 , 将head头结点的next指针指向自身 。
这样的操作方式可以方便过后的创建单链表 , 直接利用多次调用的插入函数即可完成整体创建 。
其代码如下:
//初始结点
list*initlist{
list*head=(list*)malloc(sizeof(list));
if(head==){
printf("创建失败 , 退出程序");
exit(0);
}else{
head->next=;
returnhead;
}
}
在主函数重调用可以是这样:
//////////初始化头结点//////////////
list*head=initlist;
head->next=head;
循环链表的创建操作如图所示:
其代码如下:
//创建——插入数据
intinsert_list(list*head){
intdata;//插入的数据类型
printf("请输入要插入的元素:");
scanf("%d",&data);
list*node=initlist;
node->data=https://pcff.toutiao.jxnews.com.cn/p/20200829/data;
//初始化一个新的结点 , 准备进行链接
if(head!=){
list*p=head;
//找到最后一个数据
while(p->next!=head){
p=p->next;
}
p->next=node;
node->next=head;
return1;
}else{
printf("头结点已无元素n");
return0;
}
}
循环单链表的插入操作如图 , 对于插入数据的操作 , 可以创建一个独立的结点 , 通过将需要插入的结点的上一个结点的next指针指向该节点 , 再由需要插入的结点的next指针指向下一个结点的方式完成插入操作 。
推荐阅读
- 无趣科技谈|X2凭实力拿下冠军,京东手机周销量榜单出炉,Find
- 毛毛科技说|三星S20+出现“小米价”,总算等到了,三星扛不住了
- 简简科技|余承东称鸿蒙体验已达安卓7成多,鸿蒙手机新进展
- ITheat热点科技|2020 | 坚持创新 舒尔带来MXA710音频解决方案,SSOT
- 空心|招聘丨山西千沐云物联科技有限公司
- LeoGo科技|科沃斯除菌地宝N8和米家扫拖机器人横评——两款解放双手的精品
- 小绿叶子科技|半年跌1000元,适合捡漏,iPhoneSE2扛不住了
- 电科技|“吃鸡”手游老是瞄不准?不妨选这款游戏外设配件
- 科技日日说|realme真我X7全方位评测:不一样的颜值,不一样的体验!,原创
- 硅谷聊科技|就不愿再用华为、小米了?,答案确认了!为啥很多人用了iPhone后