约瑟夫环课设计报告.docxVIP

  1. 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
约瑟夫环课设计报告

沈阳航空航天大学 课 程 设 计 报 告 课程设计名称:数据结构课程设计 课程设计题目:约瑟夫环 院(系): 专 业: 班 级: 学 号: 姓 名: 指导教师: 目 录 1 课程设计介绍 1 1.1 课程设计内容 1 1.2 课程设计要求 1 2 课程设计原理 2 2.1 课设题目粗略分析 2 2.2 原理图介绍 2 2.2.1 功能模块图(如图2.1) 2 2.2.2 流程图分析 3 3 数据结构分析 5 3.1 存储结构 5 3.2 算法描述 5 4 调试与分析 6 4.1 调试过程 6 4.2 程序执行过程 6 参考文献 8 附 录(关键部分程序清单) 9 1 课程设计介绍 1.1 课程设计内容 编号为1,2,……,n的n个人按顺时针方向围坐一圈,每人持有一个密码(正整数)。一开始任选一个正整数作为报数的上限值m,从第一个人开始按顺时针方向自1开始顺序报数,报到m时停止报数,报m的人出列,将他的密码作为新的m值,从他的顺时针方向上的下一个开始重新从1报数,如此下去,直至所有人全部出列为止,设计一个程序求出出列顺序。使用单循环链表作为存储结构 分析:由题意可以将每个人看做链表上的一个节点,每个人持有的密码即为每个节点所存储的数据;相邻的人之间存在连结关系,即链表的两个相邻节点之间由指针来进行关联;最后一个人和第一个人也存在连结关系,即链表的末尾节点和头结点相连构成了单循环链表存储结构。执行报数过程可以看做一个单独指针依次指向每一个节点,有人出列即删除掉链表中相应的节点。 1.2 课程设计要求 1.参考相应的资料,独立完成课程设计任务。 2.交规范课程设计报告和软件代码。 2 课程设计原理 2.1 课设题目粗略分析 根据课设题目要求,程序应该分为两大部分: 1、单循环链表储存结构的建立:建立所需的单循环链表数据存储结构,对每个节点输入所需的密码、序号数据并通过指针连接成单循环链表。 2、实现约瑟夫环数据出列顺序的算法:依照题目要求按照报数上限对节点进行查找和删除操作,按顺序输出出列的节点序号,依照每次出列的节点存储的密码修改报数上限循环操作直到全部节点出列完毕程序运行结束。 2.2 原理图介绍 2.2.1 功能模块图(如图2.1) 图2.1 功能模块图 2.2.2 流程图分析 1.主程序图,如图2.2:首先建立单循环链表作为数据存储结构并存储数据,然后如果执行报数。如果链表中剩余节点数大于1,执行报数操作,得到节点的序号数据并输出;若链表中只剩一个节点,输出节点的序号数据,程序运行结束。 图2.2 主程序图 2.构建单循环链表流程图,如图2.3:首先为链表存储空间,然后判断节点数是否达到上限,若没有到达上限,构建新节点;若已到达上限,将末尾节点的指针指向头结点形成单循环链表并结束建立链表操作。 图2.3构建单循环链表流程图 3 数据结构分析 3.1 存储结构 typedef struct LNode { int data; //每个人持有的密码 int num; //每个人的编号 struct LNode *next; //指向下一个节点的指针 }LNode, *LinkList; //定义一个结构体为一个持有密码的人 3.2 算法描述 1.构建单循环链表:首先定义结构体节点指针节点p,链表L,头指针head。使head指向L的头结点,p指向L。对结构体p的数据部分进行输入赋值作为L的一个节点然后向后移一位。循环此步操作形成单链表。最后将末尾节点的指针指向头结点形成单循环链表。 2.约瑟夫环出列操作:首先定义指针J和K,指针J指向单循环链表的第一个节点,随机生成一个报数上限m值。将指针p向后拨m-1次,此时p所指向节点的下一个节点即为要出列的节点,使指针K指向该节点,将这个节点从链表中删除,然后读取其中存储的序号数据输出,读取其中存储的密码作为新的m值。然后继续反复执行拨指针p,出列节点,读取数据操作,直到链表中只剩下一个节点停止循环操作,此时输出最后一个节点中的序号数据完成全部出列操作。 4 调试与分析 4.1 调试过程 调试过程中出现error C2065:’rand’: undeclared identifier报错,在添加预处理命令#includes “time.h”后正常执行; 在执行过程中出现极大数据,发现构建循环链表时将末尾指针指向了头结点,改为指向头结点的下一个节点之后正常运行; 4.2 程序执行过程 1.如图4.1所示,当输入人数为5,每个人所持有的密码依次为2、4、6、8、10时,输出结果:出列顺序为:1-3-2-5-4,程序运行正确。 图4.

文档评论(0)

erterye + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档