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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

约瑟夫环.docx

1、约瑟夫环数据结构课程设计报告设计题目:约瑟夫环专 业 网络工程 学 生 1 高大力 指导教师 路莹 起止时间 2012.6.18-6.22 大连工业大学课程设计任务书课程设计名称 数据结构课程设计专业网络工程学生姓名高大力班级网络102学号1005040204题目名称约瑟夫环起止日期2012年6月18日起至2012年6月22日止课设内容和要求:编号为1,2 n的n个人按顺时针方向围坐一圈,每人持有一个密码(正整数)。一开始任选一个正整数作为报数的上限值m,从第一个人开始按顺时针方向自1开始顺序报数,报到m时停止报数,报m的人出列,将他的密码作为新的m值,从他的顺时针方向上的下一个开始重新从1报

2、数,如此下去,直至所有人全部出列为止,设计一个程序求出出列顺序。要求:1、利用单循环链表作为存储结构模拟此过程;2、键盘输入总人数、初始报数上限值m及各人密码;3、按照出列顺序输出各人的编号。参考资料: 算法与数据结构C语言程序设计教研室审核意见: 教研室主任签字:指导教师(签名)年月日学 生(签名)年月日目 录1 问题分析 31.1 问题重述 31.2 问题分析 32 程序设计 42.1 总体设计 42.1.1 数据结构设计 42.1.2 函数设计 42.2 函数调用关系 52.3 主要函数流程图 63 调试分析 84 测试及运行结果 9参考文献 10附 录 111 问题分析1.1 问题重述

3、题目要求的约瑟夫环操作:编号是1,2,,n的n个人按照顺时针方向围坐一圈,每个人只有一个密码(正整数)。一开始任选一个正整数作为报数上限值m,从第一个仍开始顺时针方向自1开始顺序报数,报到m时停止报数。报m的人出列,将他的密码作为新的m值,从他在顺时针方向的下一个人开始重新从1报数,如此下去,直到所有人全部出列为止。设计一个程序来求出出列顺序。1.2 问题分析 本程序主要是以建立单循环链表的形式,建立起一个约瑟夫环,然后根据之前创立的结点,输入结点里的一些数据,如下typedef struct Node int Index; 在当前环中所处的位置,即编号 int Password; 在当前环中

4、的所带的密码 struct Node *next; JosephuNode; 程序有主函数开始,首先,提示输入创建约瑟夫环环数以及每个环上所带的密码。然后,开始调用JosephuNode *Creat_Node函数,利用单循环链表建立起约瑟夫环,tail-next = head;就是将最后一个结点的后继指向头结点,函数结尾 return head; 将约瑟夫环的头指针返回,并将它赋值head,然后主函数继续调用Josephu函数,通过讲head和Password引入函数,以建立两个嵌套循环输出并实现题目所要求的功能。2 程序设计2.1 总体设计2.1.1 数据结构设计使用单循环链表创建约瑟夫环

5、: #include #include typedef struct Node int Index; int Password; struct Node *next; JosephuNode;2.1.2 函数设计表2.1 函数列表函数名称函数原型功能描述mainvoid main()主函数,程序入口Creat_Node JosephuNode *Creat_Node创建约瑟夫环Josephuvoid Josephu输出约瑟夫环的结果2.2 函数调用关系图2.2 函数调用关系图2.3 主要函数流程图(1)Creat_Node函数流程图如图2.3所示int i,pass;JosephuNode *

6、head, *tail;head = tail = (JosephuNode *)malloc(sizeof(JosephuNode);for (i = 1; i Index = iprintf(tt请输入第%d号所带密码: ,i)scanf(%d,&pass)tail-Password=passtail-next = (JosephuNode *)malloc(sizeof(JosephuNode)tail = tail-nexttail-Index = iprintf(tt请输入第%d号所带密码: ,i)scanf(%d,&pass)tail-Password=pass;tail-next

7、 = head;return head图2.3 JosephuNode *Creat_Node流程图(2)Josephu函数流程图int i,jJosephuNode *tailfor (i = 1; tail != head; +i)for (j = 1; j nexttail-next = head-nextprintf(ntt第%d个出局的人的编号是:%dt密码是:%d,i,head-Index,head-PasswordPassword=head-Passwordfree(head)head = tail-nexti =head-Passwordj=head-Indexprintf(n

8、tt第7个出局的人的编号是:%dt密码是:%dn,j,i)free(head)图2.4 Josephu函数流程图3 调试分析1、问题:若输入相同的数字,可能导致程序无法正确的建立单循环链表解决:建立一个函数,使如果输入了相同的数字,则会ruturn error,使程序终止。2、问题:输入的数据为空时无法继续程序的运行。 解决:经查阅书籍,更正错误,修正程序。4 测试及运行结果5 图2.5约瑟夫环的运行结果参考文献1 严蔚敏,吴伟民.数据结构(C语言版).北京:清华大学出版社,20072 谭浩强,C语言程序设计教程. 北京:清华大学出版社,20053 徐孝凯,数据结构课程实验. 北京:清华大学出

9、版社,20064 秦锋,袁志祥 数据结构(C语言版)例题详解与课程设计指导. 北京:中国科学技术大学出版社,20075 秦锋,数据结构(C语言版). 北京:中国科学技术大学出版社,2005附 录源程序清单:#include #include typedef struct Node int Index; int Password; struct Node *next; JosephuNode; / 使用单循环链表创建约瑟夫环JosephuNode *Creat_Node(int numbers) int i,pass; JosephuNode *head, *tail; head = tail

10、= (JosephuNode *)malloc(sizeof(JosephuNode); /申请头结点 for (i = 1; i Index = i; printf(tt请输入第%d号所带密码: ,i); /输入当前结点所带密码 scanf(%d,&pass); tail-Password=pass; tail-next = (JosephuNode *)malloc(sizeof(JosephuNode); /申请一个新结点 tail = tail-next; /指针指向下一个结点 tail-Index = i; printf(tt请输入第%d号所带密码: ,i); scanf(%d,&p

11、ass); tail-Password=pass; tail-next = head; /将尾结点指针指向表头 return head;/Creat_Node/ 约瑟夫环void Josephu(JosephuNode *head,int Password) int i,j; JosephuNode *tail; for (i = 1; tail != head; +i) for (j = 1; j next; tail-next = head-next; printf(ntt第%d个出局的人的编号是:%dt密码是:%d,i,head-Index,head-Password); Passwor

12、d=head-Password; free(head); head = tail-next; i =head-Password; j=head-Index; printf(ntt第7个出局的人的编号是:%dt密码是:%dn,j,i); free(head); /Josephu/void main() int numbers, Password; char stop; JosephuNode *head; printf(tt- 约瑟夫环问题 -n); printf(tt例如:输入约瑟夫问题的人数和起始密码:7,20n); printf(tt-n); do printf(tt开始.ntt输入约瑟夫

13、环问题的人数和起始密码:); scanf(%d,%d, &numbers, &Password); head=Creat_Node(numbers); printf(tt-n); printf(tt输出结果如下n); Josephu(head,Password); printf(tt-n); printf(tt是否继续进行?是Y(y),否N(n)t); getchar(); scanf(%c,&stop); getchar(); printf(tt-n); while(stop=y|stop=Y); 课程设计总结:此程序目前的缺点在于,结点密码数据类型定义的存储类型是int型,不能超过-214

14、74836482147483648,一旦超过则程序输出结果有误,另一个缺点就是程序运行当中,一旦中途输入出现错误,则无法返回,必须将当前操作结束等到下个主函数的循环开始,或者直接退出重新运行此程序。优点则在于程序运行速度较快,不会出现输出结果有误的问题经过这次集中上机的实验,从开始选题到自己上手还是编写程序的过程中,我学会了很多的东西,以前对C语言的知识和算法总是模棱两可的,经过这次练习,在某些方面上还是经过了加强的训练。此次,实验,从开始构建循环链表然后实现约瑟夫环功能的过程中,中途也遇见一些问题,但都逐一克服,相信在这次的实验中提升了较大的自身动手实践能力。学好数据结构!指导教师评语:指导教师(签字): 年 月 日课程设计成绩

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

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