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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

约瑟夫环问题课程设计报告Word格式文档下载.docx

1、如下图分析:这就是第二步的位置, 这时他的密码作为新的m值,即m=4,同时得到的第一个密码为4; 4号出去向下走4, 到9这儿;(这这一步 完了剩余的为:1,2,3,5,6,7,8,9,0,)这就是第三步的位置,这 时他的密码作为新的 m 值,即m=9,同时得到 的第二个密码为9; 9号 出去向下走9倒0这儿; 继续走就行了(这儿剩余 的就是:1,2,3,5, 6,7,8,0)图1约瑟夫环问图解(本图只演示前两步) / 2 | 4 . 1 | 7 , 46 1 4 7 2 3 5图2约瑟夫环原理演示图1.2功能分析约瑟夫环问题是一个古老的数学问题,本次课题要求用程序语言的方式解 决数学问题。此

2、问题仅使用单循环链表就可以解决此问题。而改进的约瑟夫问 题通过运用双向循环链表,同样也能方便地解决。在建立双向循环链表时,因为约瑟夫环的大小由输入决定。为方便操作,我们将每个结点的数据域的值定为生成结点时的顺序号和每个人持有的密码。进行操作时,用一个指针current指向当前的结点,指针front始终指向头结 点。然后建立双向循环链表,因为每个人的密码是通过rand()函数随机生成的, 所以指定第一个人的顺序号,找到结点,不断地从链表中删除链结点,直到链 表剩下最后一个结点,通过一系列的循环就可以解决改进约瑟夫环问题。、概要设计1、循环链表抽象数据类型定义typedef struct LNod

3、e/ 定义单循环链表中节点的结构int num;/ 编号int pwd;/passwordstruct LNode *next;/ 指向下一结点的指针LNode;2、本程序包含一下几个模块(1)构造结点模块LNode *createNode(int m_num,int m_pwd)LNode *p;p=(LNode *)malloc(sizeof(LNode);/ 生成一个结点p- num=m_num;/把实参赋给相应的数据域 p-pwd=m_pwd;next=NULL;/ 指针域为空return p;(2)创建链表模块void createList(LNode *ppHead,int n)(

4、3)出队处理模块void jose(LNode *ppHead,int m_pwd)(4)约瑟夫环说明输出模块void instruction()(5)菜单模块void menu()(6)主函数模块int mai n ()函数的调用关系图如下:三、详细设计1.主函数图4主函数数据流程图根据流程图,主函数程序如下:int mai n()int n,m,x;LNode *ppHead=NULL;menu();for(;)prin tf(n 请选择要执行的操作:);sea nf(%d, &x);system(clsswitch(x)case 1:printf(*n)printf(约瑟夫环:n 编号为

5、1,2,3,4,n的n个人按顺时针方向围坐一圈,每人持有一个密n 码(正整数).一开始任选一个正整数作为报数的上限值 m,从第一个人开始 n 按顺时针方向自1开始顺序报数,报到m时停止.报m的人出列,将他的密码nm 作为新的m值,从他在顺时针方向上的下一人开始重新从 1报数,如此下去 ,n 直到所有人全部出列为止 . 编程打印出列顺序 .n*nmain();break;case 2:n 请输入总人数 n: scanf(,&n); 请输入开始上限数 m:scanf(m);createList(&ppHead,n); 出队顺序: n jose(ppHead,m);n 约瑟夫环游戏结束 !case

6、0:exit(0);default: system(n 您选择的操作有误,请重新选择 .nnn main();return 0;2.链表的创建/*创建单向循环链表ppHead人数个数为n,并输入每个人的密码值,若建立失败则生成头结点,让cur指向他,若建立成功则插入结点 P, cur指向的数据元素为p,后续为空的节点,再把P插入循环链表ppHead中*/根据流程图,创建链表函数程序如下:void createList(LNode *ppHead,i nt n)int i,m_pwd;LNode *p,*cur;/cur: 浮标指针for(i=1;in ext=*ppHead;/cur 的指针域

7、指向自身else/如果不为空,则插入结点n ext = cur-n ext;cur- n ext = p;cur= p;/cur 指向新插入结点 完成创建! / 提示链表创建完成3.出队处理输出其持有的密码i=ppHead_pwd;j=ppHead-num;移动浮标指针m_pwd=ppHead-执行完后返回主函数输出密码后,删除相应的结点, 并释放所占的储存空间free(ppHead); ppHead=p-n图6出队函数的数据流程图/*p 指向要删除节点的前一个节点, ppHead 指向要删除的节点,使 p=ppHead, ppHead再指向要删除节点的下一个节点, 使p和ppHead链接,输

8、出p指向节点的编号和密码值,释放ppHead,如此循环,直至把所有节点都打印和删除为止! */根据流程图,出队函数程序如下:int i,j;LNode *p,*p_del;/ 定义指针变量p!=ppHead;i+)for(j=1;jnext;/ppHead 指向下一个元素next = ppHead-/p 结点与头结点链接i=ppHead-/i 赋值为 ppHead-pwd/j 赋值为 ppHead-num, j 为要删除的密码值 printf( 第4 个人出列,密码:dn,j,i);/m_pwd值为 ppHead-pwd free(ppHead);/ 释放头结点ppHead=p-/ppHead

9、 重 新 赋 值 给 p-next, 即 释 放 前 的 ppHead-pwd指针删除报数结点num printf( 最后一个出列是4号,密码是:4.约瑟夫环说明模块 约瑟夫环 : 编号为1,2,3,4,n的n个人按顺时针方向围坐一圈,每人持有一个密 n 码(正整数).一开始任选一个正整数作为报数的上限值 m,从第一个人开始 n 按顺时针方向自1开始顺序报数,报到时停止.报m的人出列,将他的密码 nm 作为新的m值,从他在顺时针方向上的下一人开始重新从 1报数,如此下去 ,n5.菜单模块void menu()*四、程序调试与测试1. 调用模块时,结点结构的调用与其他模块产生冲突,导致每一行都出

10、现 两次错误,加入子函数的声明后错误消失。2 . 刚开始时曾忽略了一些变量参数的标识 & 和“*”,使调试程序时费时不少。今后应重视确定参数的变量和赋值属性的区分和标识。3. 本次课程设计采用数据抽象的程序设计方法,将程序划分为三个层次结 构:元素节点、单向循环链表, 主控制模块。 思路较为清晰, 实现调用顺利。 经 过本次实验,使我对数据结构这门课程有了进一步的了解,每一个程序经过需 求分析、概要设计、详细设计之后,思路即清晰呈现,程序也很快就出来了, 最后经过调试、运行又有新的体验。这是一个使用循环链表的经典问题。本程序开始运行界面如下:图7约瑟夫环开始运行界面选择1进入约瑟夫环问题阐述。

11、图8约瑟夫环问题阐述选择2,输入下列数据测试:请输入总人数n: 7请输入开始上限数m 20;请依次输入每个人的密码:3 1 7 2 484出队顺序:24820触人开始上?艮数叭 決辘个人的哲国: 入勲个人的窖码= ,入勲个人的密码: b入熱个人的哲码 认勲*人的警码: 入剌个人的巒佻 完应创建::8:g:S憾 a出出出出出岀-i %人人人人入T右码是汩J毎夫环游舞吉耒辛 X :M aoffif tf MiXMiKiMmf 豪:M 英 it% 垃风羔耳號约瑟天环欢边使,弔|图9约瑟夫环测试1继续选择2,输入下列数据测试: 5请输入开始上限数m 303 4 5 6 75 3 1 2 4亠n x测试

12、完成,选择0退出。设计总结我的这次数据结构课程设计的题目是:约瑟夫环, 通过对该题目的设计,我加深了对数据结构及存储结 构的理解,进一步地理解和掌握了课本中所学的各种 数据结构,尤其是对单循环链表上基本运算的实现 ,学会了如何把学到的知识用于解决实际问题,锻炼了 自己动手的能力。通过这次数据结构课程设计,我感受最深的就是对 于循环链表的使用,可以说对循环链表有了比以前更 进一步的认识,以前只是一知半解的,如果只给个题 目自己根本不能把程序完整地编写出来,所以这次课 程设计最大的收获就在于对循环链表有了一定的理 解,包括其中的一系列操作,如建立一个循环链表, 删除链表中的一个结点,增加一个结点等。在调试程序的时候我也有所体会, 虽然约瑟夫环问 题不是很难,但调试的时候还是会出现很多错误,因 此我们不能认为容易就不认真对待。在以后的学习 中,要能不断发现问题,提出问题,解决问题,从不 足之处出发,在不断学习中提高自己。一周的课程设计很短暂,但其间的内容是很充实 的,在其中我学习到了很多平时书本中无法学到的东 西,积累了经验,锻炼了自己分析问题,解决问题的 能力,并学会了如何将所学的各课知识融会,组织起 来进行学习,总而言之这两周中我学到很多,受益匪 浅。

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

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