数据结构约瑟夫环课程设计报告书.docx
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_05.gif)
《数据结构约瑟夫环课程设计报告书.docx》由会员分享,可在线阅读,更多相关《数据结构约瑟夫环课程设计报告书.docx(11页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、数据结构约瑟夫环课程设计报告书 数据结构课程设计报告书 设计题目:约瑟夫环 专业: 班级: 姓名: 指导教师: 完成日期: 目录 一、问题描述 (1) 二、基本要求 (1) 三、测试数据 (1) 四、算法思想 (2) 五、模块划分 (3) 六、数据结构 (4) 七、源程序 (4) 八、界面设计 (6) 九、运行与测试 (6) 十、总结 (8) 十一、思考与感悟 (9) 课程设计设计报告书 一、问题描述 约瑟夫问题是由古罗马著名的史学家Josephus提出的问题演变而来,所以通常称为Josephus问题。改进约瑟夫问题的描述是:编号为1,2,n的n个人按顺时针方向围坐一圈, 每人有一个密码(整数
2、),留作其出圈后应报到后出圈。报数方法采用顺时针报数和逆时针报数交替进行,初始密码可任意确定。求最后剩下的人的编号。这个就是约瑟夫环问题的实际场景,后来老师要求我们对要求中的每人所持有的密码以及第一次的报数上限值要用随机数产生。因此约瑟夫环问题如果采用双向循环链表则能很好的解决。循环链表的数据结构,就是将一个链表的尾元素指针指向队首元素。p-link=head解决问题的核心步骤:先建立一个具有n个链结点,无头结点的循环链表,然后确定第一个报数人的位置,并不断地从链表中删除链结点,直到链表为空。 二、基本要求 (1)输入的形式和输入值的范围:输入的形式是以数字的形式输入,输入范围为-214748
3、36482147483648 (2)输出的形式:字符串形式输出 (3)程序所能达到的功能:达到符合约瑟夫环要求的响应功能。 三、测试数据 进入程序,显示“1.开始游戏0.退出游戏”输入非0数进入游戏,输入0退出游戏。 进入游戏后显示“输入总人数”,输入大于0的整数;若输入错误,则光标处清空,重新输入。 后提示“输入开始人的序号”;范围是大于零,小于总人数的整数,若输入错误,则光标处清空,重新输入。 后提示“输入间隔数字”,范围是任意正整数;若输入错误,则光标处清空,重新输入。 按回车键,显示结果,并重新询问“1.开始游戏0.退出游戏”。 四、算法思想 首先,设计实现约瑟夫环问题的存储结构。由于
4、约瑟夫环本身具有循环性质,考虑采用循环链表,为了统一对表中任意节点的操作,循环链表不带头结点。循环链表的结点定义为如下结构类型: typedef struct node int data; struct node *next; LNode; 其次,建立一个不带头结点的循环链表并由头指针p指示。 最后,设计约瑟夫环问题的算法。 1、工作指针first,r,s,p,q初始化 2、输入人数(n)和报数(m) 3、循环n次,用尾插法创建链表 int start=k-1; LNode *s,*p,*L=0,*t; if (start=0) start=n; while (n!=0) s=(LNode *
5、)malloc(sizeof(LNode); if (L=0) p=s; if (n=start) t=s; s-data=n; s-next=L; L=s; n-; p-next=L; return t; LNode* GetNode(LNode *p)/*出队函数*/ LNode *q; for (q=p;q-next!=p;q=q-next); q-next=p-next; free (p); return (q); 4、输入报数的起始人号数k; 5、循环n次删除结点并报出位置(其中第一个人后移k个) 当inext=L; 删除p结点的后一结点q q=p;q-next!=p;q=q-nex
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 约瑟夫 课程设计 报告书
![提示](https://www.taowenge.com/images/bang_tan.gif)
限制150内