数据结构线性表链表
前言:
今天课上我们老师复习了单链表的头插法和尾插法,插入和删除,这几个不太懂的童鞋关注我上一篇文章,然后老师讲解了约瑟夫环,约瑟夫环采用的是循环链表,今天我们复习一下约瑟夫环的算法,顺便提前预习一下双向链表和循环双向链表。
每日一遍,防止颓废
你的室友可能在划水,但绝对没有停止学习,明修栈道,暗度陈仓
1.1 约瑟夫环
我们先了解一下约瑟夫环,约瑟夫环是一个悲惨的故事在罗马人占领乔塔帕特后,39 个犹太人与 Josephus 及他的朋友躲到一个洞中,39 个犹太人决定宁愿死也不要被敌人抓到,于是决定了一个自杀方式,41 个人排成一个圆圈,由第 1 个人开始报数,每报数到第 3 人该人就必须自杀,然后再由下一个重新报数,直到所有人都自杀身亡为止,我们用简单一点的数据,N 个人围成一圈,从第一个开始报数,第 M 个将被出列。例如 N=6,M=5,出列的顺序是:5,4,6,2,3**,**1
来个图分析一下:
讲人话就是:一个首尾连接的单链表,每次计数,达到要求了把它输出再删除,差不多和单链表的删除一样(只是多循环了几次):写一下给大家看看,代码如下:
效果展示:
2.双向链表
双向链表也叫双链表,是链表的一种,它的每个数据结点中都有两个指针,分别指向直接后继和直接前驱。所以,从双向链表中的任意一个结点开始,都可以很方便地访问它的前驱结点和后继结点(讲人话就是:一个结点可以往前访问也可以往后面访问)结合生活中的楼梯或者电梯联想一下吧:
用个小故事加深大家的映像
微风拂过那窗口那个女孩的脸庞,她似乎在注视着什么,楼下的人群过马路的人群,有着一个男孩的,她注视着,直到那个男孩注视着她,他们的眼神在交流,女孩脸庞展露着丝丝红润,似刚刚开放的桃花,微微泛红,又似蜜桃,甜润饱满,男孩的眼神,如电一般,犀利,迷人,他们眼神相对,彼此逃避着,又互相牵引着,女孩快速出门,来到了,楼梯间,她犹豫着,他会走那边,这边也可以上下,那边也可以,男孩也犹豫着,天公不作美,他们之间,一个下楼,一个上楼,彼此错过,男孩摇摇头说:“下次遇到她一定要叫她交房租”,女孩叹着气说:“幸亏跑的快,不然就要交房租了”,哈哈哈,女孩下楼就是链表往下遍历 next,男孩上楼就是往上遍历 port,他们之间其实就是相当于两条链表,但是有同学就问了,我要是那个男孩就上去一半,发现她不在,然后再到另一边下去,就可以遇到她了,说明我们同学还是很聪明的,这就相当于我往下遍历一半,再往上遍历回到起点,这种做法在双向链表里可以做到的,双向链表就好比坐电梯能上能下,楼层就是我们的数据。
博主用的是尾插法新建的效果展示一下:
3.双向链表插入和删除:
3.1 双向链表的插入,插入是需要两个结点的,注意:要保持 p 的后继是最后断开就可以了,也就是第四步其他几步的位置没要求。
效果展示:
3.2 双向链表的删除,只需要一个结点,就可以完成啦
代码如下:
效果展示:我删除了链表 3 位置的数据
3.循环双向链表
3.1 循环双向链表和循环单链表差不多,就是多了个前驱结点,可以往前执行。
3.2 创建循环双向链表,让我们卷起来,铁子们
用代码实现一下:
效果展示:
使用我们之前双向链表后继的输出应该是死循环
使用我们之前双向链表前驱的输出应该是死循环
总结:
数据结构,线性表链表的操作我们基本上都操作,循环双向链表的插入和删除和双向表的插入删除是一样的,我们没有做更多的操作了,如果有什么问题,可以评论问我,我们可以一起探讨一下,学习还是得动手敲,博主提供的代码是可以直接建项目跑,也可以跟着博主总结的步骤图,一步一步的敲。好了,创作不易,希望大家喜欢,点赞,关注,评论,收藏,博主会跟着数据结构往下面更新,有喜欢的可以收藏哦。放个图让大家卷起来。
上一篇:# 数据结构专升本学习笔记,线性表链表小节</br>下一篇:# 数据结构专升本学习,栈篇(顺序栈)
版权声明: 本文为 InfoQ 作者【IC00】的原创文章。
原文链接:【http://xie.infoq.cn/article/f490b94857f5d4061d5159d9c】。文章转载请联系作者。
评论