期末复习——循环链表

本文介绍了约瑟夫环问题及其使用循环链表的解决方案。约瑟夫环是一个经典的算法问题,通过建立循环链表,按照特定规则删除节点,最终找出存活的节点。文章详细阐述了循环链表的特点,并提供了两种不同的算法实现,包括时间复杂度分析。

应用实例 约瑟夫环问题

约瑟夫环(Josephus)问题是由古罗马的史学家约瑟夫(Josephus)提出的。这个问题最初的原型是约瑟夫在公元70年的时候,在抗击罗马的战斗中一直进行顽强的抵抗,守住了裘达伯特城达47天之久,最后城市沦陷以后,他和四十多名将士就躲在一个洞穴里,当时大家都非常顽强说:“要投降,吾宁死”,后来约瑟夫就想了一个办法,我们每个人把旁边的一个人杀死,轮流的杀死,杀死的顺序由抽签来决定,最后他抽到了最后一签,但他也没杀死他旁边的这个人,他们两个人一起活了下来,然后投降了罗马。

约瑟夫环(Josephus)问题本身的描述为:编号为1,2,…,n的n个人按顺时针方向围坐在一张圆桌周围,每人持有一个密码(正整数)。一开始任选一个正整数作为报数上限值m,从第一个人开始按顺时针方向自1开始报数,报到m时停止报数,报m的那个人出列,将他的密码作为新的m值,从他顺时针方向的下一个人开始重新从1报数,数到m的那个人又出列;如此下去,直至圆桌周围的人全部出列为止。

约瑟夫环(Josephus)问题的实现提示:

算法分析:采用单向循环链表
结点结构:id passwoed next
解决问题的基本步骤如下:
(1)建立n个结点(无头结点)的单向循环链表。
(2)从链表第一个结点起循环计数寻找第m个结点。
(3)输出该结点的id值,将该结点的password作为新的m值,删除该结点。
(4)根据m值不断从链表中删除结点,直到链表为空。

具体可参考https://blog.youkuaiyun.com/ITmincherry/article/details/104116010

循环链表

循环链表(Circular Linked List):是一个首尾相接的链表。
特点:将单链表最后一个结点的指针域由NULL改为指向头结点或线性表中的第一个

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值