实验名称:约瑟夫环 问题描述:约瑟夫环问题的一种描述是:编号为1,2,...,n的n个人按顺时针方向围坐一圈,每人持有一个密码(正整数)。一开始任选一个正整数作为报数上限值m,从第一个人开始按顺时针方向自1开始顺序报数,报到m时停止报数。报m的人出列,将他的密码作为新的m值,从他在顺时针方向上的下一个人开始重新从1报数,如此下去,直到所有人全部出列为止。试设计一个程序求出出列顺序。 基本要求:利用单向循环链表模拟此过程,按照出列的顺序印出各人的编号。 测试数据:m的初值为20;n=7,7个人的密码依次为:3,1,7,2,4,8,4,首先m值为6(正确的出列顺序应为6,1,4,7,2,3,5)。 实现提示:程序运行后,首先要求用户指定初始报数上限值,然后读取各人的密码。可设n<=30。此题所用的循环链表中不需要头结点,注意空表和非空表的界限。
时间: 2023-05-28 21:07:57 浏览: 124
实验思路:首先创建一个单向循环链表,每个节点代表一个人,节点中包含该人的编号和密码。然后按照题目要求,从第一个人开始顺序报数,报到m时,将该节点从链表中删除,并将其密码作为新的m值,从该节点的下一个节点开始重新报数。直到链表中只剩下一个节点,结束循环,输出出列顺序。
实验步骤:
1. 定义一个节点结构体,包含该人的编号和密码,以及指向下一个节点的指针。
2. 创建一个单向循环链表,包含n个节点,每个节点的编号从1到n。
3. 从用户输入获取初始报数上限值m。
4. 从用户输入获取每个人的密码,并将其存储在对应的节点中。
5. 从第一个节点开始顺序报数,报到m时,将该节点从链表中删除,并将其密码作为新的m值,从该节点的下一个节点开始重新报数,直到链表中只剩下一个节点,结束循环,输出出列顺序。
实验代码:
阅读全文