1、 数据结构数据结构课程设计课程设计 题 目: 排序系统设计(约瑟夫环问题) 班 级: 姓 名: 学 号 同组人姓名: 起 迄 日 期: 2010 年 12 月 26 日 课程设计地点: E3-A513 指导教师: 评阅意见:评阅意见: 成绩评定:成绩评定: 评阅人:评阅人: 日期:日期: 完成日期:2011 年 12 月 摘要: 功能:设编号为 1,2,3,n的 n(n0)个人按顺时针方向围坐一圈, 每个人持有一个正整数密码。开始时任选一个正整数做为报数上限 m,从第一个 人开始顺时针方向自 1 起顺序报数,报到 m是停止报数,报 m 的人出列,将他 的密码作为新的 m 值,从他的下一个人开始
2、重新从 1 报数。如此下去,直到所 有人全部出列为止。令 n 最大值取 30。要求设计一个程序模拟此过程,求出出 列编号序列。 目目 录录 1 1 需求分析需求分析 2 2 1.1 功能分析 2 1.2 设计平台 2 2 2 概要设计概要设计 2 2 2.1 创建循环单链表 create()2 2.2 输出查找 search() 3 2.3 异常处理及屏幕清理 clean() 3 3 3 程序设计主要流程程序设计主要流程 4 4 3.1 程序实现流程图 4 4 4 调试与操作说明调试与操作说明 4 4 4.1 调试情况 4 4.2 操作说明 5 总总 结结 7 7 致致 谢谢 8 8 附附 录
3、录 9 9 参参 考考 文文 献献 错误!未定义书签。 =1= 1 需求分析需求分析 1.1 功能分析功能分析 本次选做的课程设计是改进约瑟夫(Joseph)环问题。我选择了和罗源两 个人来完成本次课程设计的作业。约瑟夫环问题是一个古老的数学问题,本次课 题要求用程序语言的方式解决数学问题。 此问题仅使用单循环链表就可以解决此 问题。 在建立单向循环链表时,因为约瑟夫环的大小由输入决定。为方便操作,我 们将每个结点的数据域的值定为生成结点时的顺序号和每个人持有的密码。 进行 操作时,用一个指针 r 指向当前的结点,指针 H 指向头结点。然后建立单向循环 链表,因为每个人的密码是通过 scanf
4、()函数输入随机生成的,所以指定第一个人 的顺序号, 找到结点, 不断地从链表中删除链结点, 直到链表剩下最后一个结点, 通过一系列的循环就可以解决改进约瑟夫环问题。 1.21.2 设计平台设计平台 Windows2007 操作系统;Microsoft Visual C+ 6.0; 2概要设计概要设计 已知 n个人(以编号 1,2,3.n分别表示)围成一圈。从编号为 1 的人开 始报数,数到 m 的那个人出列;他的下一个人又从 1 开始报数,数到 m 的那个人 又出列;依此规律重复下去,直到一圈的人全部出列。这个就是约瑟夫环问题的 实际场景,有一种是要通过输入 n,m,k 三个正整数,来求出列的序列。这个问题 采用的是典型的循环链表的数据结构, 就是将一个链表的尾元素指针指向队首元 素。r-next=H。解决问题的核心步骤:首先建