计算机科学与技术专业数据结构课程设计报告.pdfVIP

  • 3
  • 0
  • 约1.42万字
  • 约 19页
  • 2021-10-09 发布于江西
  • 举报

计算机科学与技术专业数据结构课程设计报告.pdf

郑州师范学院计算机科学与技术专业 数据结构 课程设计报告 设计题目: 约瑟夫环 班 级: B15 软件工程() 组 长: 组 员: 指导教师: 完成日期: 2016-1-7 成绩: 目 录 1 需求分析2 1.1 功能分析2 1.2 设计平台2 2 概要设计3 2.1 类LinkList5 2.2 类Joseph5 2.3 类异常处理5 3 详细设计和实现5 3.1 创建结点Node6 3.2 创建双向循环链表7 3.3 从链表中删除结点8 4 调试与操作说明12 4.1 调试情况 12 4.2 操作说明 12 5 设计总结13 参 考 文 献 14 附录 14 1 1需求分析 1.1功能分析 本次选做的课程设计是改进约瑟夫(Joseph)环问题。约瑟夫环问题是一个古 老的数学问题,本次课题要求用程序语言的方式解决数学问题。此问题仅使用单 循环链表就可以解决此问题。而改进的约瑟夫问题通过运用双向循环链表,同样 也能方便地解决。 在建立双向循环链表时,因为约瑟夫环的大小由输入决定。为方便操作,我 们将每个结点的数据域的值定为生成结点时的顺序号和每个人持有的密码。进行 操作时,用一个指针current指向当前的结点,指针front始终指向头结点。然后 建立双向循环链表,因为每个人的密码是通过rand()函数随机生成的,所以指定 第一个人的顺序号,找到结点,不断地从链表中删除链结点,直到链表剩下最后 一个结点,通过一系列的循环就可以解决改进约瑟夫环问题。 1、 本演示程序中,利用单向循环链表存储结构模拟约瑟夫问题的进行。 程序运行后,首先要求用户指定初始报数上限值,然后读取个人的密码。可设n ≤30。此题所用的循环链表中不需要“头结点”,因此在程序设计中应注意空表 和非空表的界限。 2、 演示程序以用户和计算机的对话方式执行,即在计算机终端上显示 “提示信息”之后,由用户在键盘上输入演示程序中规定的运算命令:相应的输 入数据和运算结果显示在其后。 3、 程序执行的命令包括: 1) 构造约瑟夫环;2)执行约瑟夫环,并输出出列人的序号以及相应的 密码; 3)结束。 4、测试数据 1)m 的初始值为20; 2)n=7,7 个人的密码依次为:3、1、7、2、4、8、4。 3)首先m 值为6,正确的出列顺序应为6、1、4、7、2、3、5。 1.2设计平台 2 Windows2000 以上操作系统;Microsoft Visual C++ 6.0 2概要设计 已知n 个人(以编号1,2,3...n 分别表示)围成一圈。从编号为1的人开 始报数,数到m 的那个人出列;他的下一个人又从1开始报数,数到m 的那个人 又出列;依此规律重复下去,直到一圈的人全部出列。这个就是约瑟夫环问题的 实际场景,有一种是要通过输入n,m,k 三个正整数,来求出列的序列。这个问题 采用的是典型的循环链表的数据结构,就是将一个链表的尾元素指针指向队首元 素。 p-link=head 。解决问题的核心步骤:首先建立一个具有n 个链结点,无头 结点的循环链表。然后确定第1 个报数人的位置。最后不断地从链表中删除链结 点,直到链表为空。 改进的约瑟夫环问题与原问题思路一致,只是不再采用单循环链表存储结 构,而采用双向循环链表,而且用一个判断语句来决定报数的方向的顺时针还是 逆时针。本课程设计主要采用了类的数据结构,程序中包含了两个类:Linklist , Joseph 。 为实现上述程序功能,应以单向循环链表表示约瑟夫环。为此,需要两个抽象数据类型: 单向循环链表和约瑟夫环。 1)、单向循环链表的抽象数据类型定义为: ADT

文档评论(0)

1亿VIP精品文档

相关文档