约瑟夫环问题课程设计说明书

约瑟夫环问题课程设计说明书

ID:36571097

大小:342.00 KB

页数:33页

时间:2019-05-12

约瑟夫环问题课程设计说明书_第1页
约瑟夫环问题课程设计说明书_第2页
约瑟夫环问题课程设计说明书_第3页
约瑟夫环问题课程设计说明书_第4页
约瑟夫环问题课程设计说明书_第5页
资源描述:

《约瑟夫环问题课程设计说明书》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库

1、目录:摘要2前言3课程设计报告正文4一.需求分析4二.概要设计5三.详细设计71.各模块关键代码及算法的解释:72.函数的调用关系图10四.调试分析13五.用户使用说明15六.测试结果16七.源程序(带注释)22总结26参考文献26致谢28附录,带注释的源程序2933第33页共33页摘要当约瑟夫环中某人退出圆圈后,报数的工作要从下一个人开始继续,剩下的人仍然是围成一个圆圈的,可以使用循环表,由于退出圆圈的工作对应着表中结点的删除操作,对于这种删除操作频繁的情况,选用效率较高的链表结构,为了程序指针每一次都指向一个具体的代表一个人的结点而不需要判断,链表不带头结点

2、。所以,对于所有人围成的圆圈所对应的数据结构采用一个不带头结点的循环链表来描述。设头指针为p,并根据具体情况移动。为了记录退出的人的先后顺序,采用一个顺序表进行存储。程序结束后再输出依次退出的人的编号顺序。由于只记录各个结点的number值就可以,所以定义一个整型一维数组。如:intquit[n];n为一个根据实际问题定义的一个足够大的整数。解决问题的核心步骤:1.建立一个具有n个链结点,无头结点的循环链表2.确定第1个报数人的位置3.不断地从链表中删除链结点,直到链表为空33第33页共33页前言约瑟夫环(Josephus)问题是由古罗马的史学家约瑟夫(Jose

3、phus)提出的,他参加并记录了公元66—70年犹太人反抗罗马的起义。约瑟夫作为一个将军,设法守住了裘达伯特城达47天之久,在城市沦陷之后,他和40名死硬的将士在附近的一个洞穴中避难。在那里,这些叛乱者表决说“要投降毋宁死”。于是,约瑟夫建议每个人轮流杀死他旁边的人,而这个顺序是由抽签决定的。约瑟夫有预谋地抓到了最后一签,并且,作为洞穴中的两个幸存者之一,他说服了他原先的牺牲品一起投降了罗马。约瑟夫环问题的具体描述是:设有编号为1,2,……,n的n(n>0)个人围成一个圈,从第1个人开始报数,报到m时停止报数,报m的人出圈,再从他的下一个人起重新报数,报到m时停

4、止报数,报m的出圈,……,如此下去,直到所有人全部出圈为止。当任意给定n和m后,设计算法求n个人出圈的次序。33第33页共33页课程设计报告正文一.需求分析1.输入的形式和输入值的范围本程序中,输入人数n(n小于等于30)和初始密码m(m大于等于1),然后给每个人输入所持有的密码key,均限定为正整数。用单循环链表模拟约瑟夫环,从队头开始从1报数,报到m的人出列,再把此人的密码赋给m,继续下一轮的报数,直到所有的人出列。结果出来后再选择输入一数字,输入1继续新一轮的游戏,输入0结束,退出此游戏。演示程序以用户和计算机对话方式进行,根据提示信息由用户从键盘输入数据

5、,输入的形式为一个以“回车符”为结束标志的正整数。2.输出的形式在计算机终端上显示提示信息之后,有用户在键盘上输入演示程序中规定的运算命令,相应的输入数据和运算结果显示在其后。运行后输出的结果是约瑟夫环的相关信息和经过报数后出队的人的序列号及相关信息。程序执行的命令包括:(1)输入人数和初始密码(2)输入所有人的密码(3)显示输入的所有人的编号及相应的密码(4)输出出列密码及编号(5)结束即:(1)构造单循环链表;(2)输出循环链表的信息;(3)按照出列的顺序输出各人的编号3.程序功能提供用户从键盘输入,Joseph约瑟夫环的必要数据,并从屏幕显示出列顺序。4.

6、测试数据(1)n=7,m=20(常规数据),7个人的密码依次为3,1,7,2,4,8,4,正确的输出序列为6,1,4,7,2,3,5.(2)n=5,m=6(常规数据),5个人的密码依次为2,5,4,6,7,正确的输出序列为1,3,4,2,5。(3)n=31,m=3(错误数据),“这个人数太大了,请重新输入”。33第33页共33页(4)n=0,m=3(错误数据),“这个约瑟夫环里没有人!”。(5)n=1,m=4,(边缘数据),正确的输出序列为1。(6)n=3,m=1,(边缘数据),正确的输出序列为1,3,2。第一组为常规数据,中间两组为错误数据,后面两组为边缘数据

7、。5.设计思路及方案用单循环链表来模拟约瑟夫环,结点信息包括编号、密码、指向下一个结点的指针,用三大主要的函数来实现功能,包括创建链表的函数、输出链表信息的函数、删除结点也就是出队的函数、主函数等函数。二.概要设计1.抽象数据类型的定义为实现上述功能,应以有序单向循环链表表示约瑟夫环。为此,需要有一个抽象数据类型。该抽象数据类型的定义为:ADTLinkList{数据对象:D={ai

8、ai∈termset,i=1,2,……n,n>=0},termset中每个元素包含编号,密码,和一个指向下一节点的指针数据关系:R1={

9、ai-1,ai∈D,i=2

10、,……n}基本操作:Li

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。