ImageVerifierCode 换一换
格式:DOCX , 页数:16 ,大小:237.74KB ,
资源ID:16214127      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/16214127.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(计1143班 刘镇 58504337约瑟夫环游戏课程设计文档文档格式.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

计1143班 刘镇 58504337约瑟夫环游戏课程设计文档文档格式.docx

1、2.4 查找search():2.5 输出序列linkout(): 52.6结构体设计:三、程序设计主流程 53.1总体设计:3.2详细流程图 6四、详细设计 74.1 link.h: 74.2 link.cpp:五、调试与测试 105.1 调试: 105.2测试: 13六、存在问题与体会: 146.1问题总结:6.2心得体会:一、需求分析约瑟夫环问题描述:编号为1,2,,n的n个人按顺时针方向坐一圈,每人持有一个密码(正整数)。一开始任选一个正整数作为报数上相值m,从第一个人开始按顺时针方向自1开始顺序报数,报到m时停止报数。报m的人出列,将他的密码作为新的m值,从他的顺时针方向上的下一个人

2、开始重新从1报数,如此下去,直至所有人全部出列为止。设计一个程序求出出列顺序。约瑟夫环问题主要是涉及到数据结构中的循环单链表的内容,通过插入链表,查询链表实现序列输出。开始主界面通过分支选择实现;主要的问题分为两个大部分,其一、是对循环单链表的创建,由于涉及到结构体和指针,因此可以通过将结构体与函数单独封装在头文件中,只有引用头文件即可,结构体内是基本的链表结构;其二、是搜索算法的涉及,思路是按照问题描述中:按初始密码查找标号修改初始密码,打印结果,改变链表结构再次搜查,直到链表内容清空为止结束搜索。其中剔除当前查找目标并将指针转到下一目标可通过将下一目标的密码及编号完全复制,删除下一目标,修

3、改当前目标的指针实现。使用C+语言设计,windows系统,数据结构:单向循环链表二、概要分析基本的欢迎界面打印。打印选择框图,并通过输入choice以switch-case语句实现功能选择,直接调用linkout(),实现序列输出。定义结构体(在2.6中详细说明)指针head、link、me,head=NULL创建一个没有头结点的单向循环链表,并采for(i=1;ihead时创建单向循环链表成功,并返回head的值。单项循环链表示意图:形式参数传入Linklist链表L,初始密码initialcode,及总人数num,在已经构建成的链表L中,以for(int i = 1; i = num;

4、i+)控制人数循环,for(int j = 1; j initialcode; j+) 实现按初始密码报数,当前循环结束时,已经遍历到要找的link指针指针指示的结点,将其密码赋值为初始密码后再将其直接后继的编号、密码完全复制,当前的节点就是与后继结点数据机构完全相同结点,改变指针next,并其删除后继结点构成新的循环链表。如此循环下去,直到最后变为空的单循环链表为止。声明变量,获取总人数,调用create(),构造链表,输入获取初始密码,调用search(),实现报数和结果序列输出。宏定义NULL 0 ;结构体中数据是编号num,密码code,指向下一结点的结构体指针 next。三、程序设计

5、主流程3.2详细流程图2 1NY四、详细设计Joseph:#define NULL 0typedef struct Node int num; /编号 int code; /密码 struct Node * next;Node, * Linklist;void mainmenu(); /主菜单void linkout(); /求出序列Linklist create(int n); /创建循环单链表void search(Linklist L,int initialcode,int num); /实现报数#include malloc.h#includestdlib.hctimeiostream

6、#include link.husing namespace std;void welcome() /欢迎界面 cout +-+n;| |n| 欢迎尝试约瑟夫环游戏 |nvoid mainmenu() /主界面 do char choice; choice = -1; cout choice; switch(choice) case 1: linkout(); break;2 cout 欢迎下次使用!退出. next = me; /将me指向的内存块(Node)连在单链表中 link = me; /将link指针指向me请输入第个人的密码: link-code; /通过输入获取当前编号下的密码

7、 link-num = i; /将编号放入link中第个人的密码:code next; /找到用link指向当前编号对应的内存地址 initialcode = link- /用当前查找的编号的密码更新初始密码num next-num;code = link- me = link-next = link- free(me);nnvoid linkout() int initialcode, num; Linklist L;输入初始人数: cin num; if(num = 30) L = create(num);输入初始密码: search(L, initialcode, num);nnnint

8、 main() welcome(); mainmenu(); system( return 0;五、调试与测试主界面:打印主界面,用户输入操作选择: 选择1:输入选项1并输入初始人数,开始键入每一个的编号密码:输入初始人数(7人),依次键入密码(3,1,7,2,4,8,4):打印出序列结果:利用循环返回主界面,若选择2退出:Joseph编号密码*nexthead32号地址3号地址74号地址45号地址56号地址687号地址结果预测:6 1 4 7 2 3 5测试结果:操作选项测试:输入选项预测结果测试结果-9无效提示进入退出a不输入1、当输入操作选择项是“afsfs”字符串时,会连续打印主界面。

9、2、在代码的细节有欠缺,当空指针时或是空链表时,未作处理。本次课程设计,在老师的总体指导下,对项目要求做了细致的分析,课程设计如果想完成,并非难事,而做细致些,做透彻些,做像样些,都不是一蹴而就的,网上资源非常多,我选择的题目“约瑟夫环问题”有很多人做过,但看的很多都有些小毛病,例如在输入数据特定,结果正确,真正多测试几次,会出现错误结果,还有在网上确实也存在不错的模版,不论是大的格式还是具体实现,都能比较清晰的展现出来,这是十分难得的,我也借鉴了比较好的几个方面,例如对于外部界面的书写,以及代码的优化,约瑟夫问题有很多小点可以多解决算法,而唯一相同的都是在单项循环列表的数据结构下操作数据的,

10、因此找到问题的主要是数据结构,问题就集中了,至于具体怎样实现,可以使因人而异;代码中全部属于自己编写,感觉先在书面上做好分析十分有效,以此为例,当对任务细分后,就变成两个小问题,一个是怎样创建一个单向循环链表,一个是怎样在已经存在的链表中实现“报数”查找及输出;单向链表比较容易,一个头指针指示链表总体,一个临时指针用于暂时存放输入的数据,还有一个移动指针随着链表的增长不断移动,以及移动过程中指针变换问题,在单向链表的基础上将末尾的指针指向头,就形成了环结构,就是所说的单向循环链表;至于搜索“报数”就是遍历链表结构,找到数据,提出数据,更新结构直到链表为空结束。在示例草图中演示结果,有了清晰思路,就可以完成本次任务。

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1