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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

c语言课程设计.docx

1、c语言课程设计学号2013-2014学年 第二学期 高级语言程序设计课程设计报告题目:Josephus环专业:数字媒体技术班级:数字媒体二班姓名:指导教师:成绩: 计算机与信息工程系 2014年 6月 20日目录1设计内容及要求 1 1.1设计内容 1 1.2设计任务及具体要求 12 概要设计 1 2.1介该系统的功能简 13 程序代码 74程序调试 85小结 101 1设计内容及要求1.1设计内容 持有一个密码(正整数)。一 开 始任选一个正整数作为报数的上限值m,从第一个人开始按顺时针方向自 编号为1,2,3,n的n个人按顺时针方向围成一圈,每个一开始报数。报到m时停止报数。报m的人出列,

2、将他的密码作为新的m值,从他在顺时针方向上的下一个开始,重新从1报数, 如此下去,直至所有人全部出列为止。设计一个出列顺序。 1.2设计任务及具体要求 利用单向循环链表存储结构模拟约瑟夫过程。按照出列的顺序印出各人的编号。基本要求:(1)建立模型,确定存储结构;(2)对任意n个人,密码为m,实现约瑟夫环问题;(3)出圈的顺序可以依次输出,也可以用一个数组存储。2 概要设计2.1介该系统的功能简分析功能 约瑟夫环问题是一个古老的数学问题,本次课题要求用序语言的方式解决数学问题。此问题仅使用单循环链表就可以解决此问题。而改进的约瑟夫问题通过运用双向循环链表,同样也能方便地解决。在建立双向循环链表时

3、,因为约瑟夫环的大小由输入决定。为方便操作,我们将每个结点的数据域的值定为生成的结点号时和每个人持有的密码。进行操作时,用一个指针current指向当前的结点,指针front始终指向头结点。然后建立双向循环链表,因为每个人的密码是顺序通过rand()函数随机生成的,所以指定第一个人的顺序号,找到结点,不断地从链表中删除链结点,直到链表剩下最后一个结点,通过一系列的循环就可以解决改进约瑟夫环问题。为实现上述题目要求及需求,应该用单向循环链表存储结构模拟此过程。 在循环链表的使用中从表的一结点出发找到表中的其他结点。如果从表头指针出发,访问链表的最后一个结点,则必须扫描表中的所有结点。若吧循环表的

4、头指针改用尾指针代替,则从尾指针出发,不仅可以立即访问最后一个结点,而且也可以十分快速方便的找到第一个结点。抽象数据类型线性表的定义如下: ADT List 数据对象:D ai | ai ElemSet, i=1,2,.,n, n0 称 n 为线性表的表长; 称 n=0 时的线性表为空表。 数据关系:R1 |ai-1 ,aiD, i=2,.,n 设线性表为的前驱结点来标识这个当前结点呢?这样所有的问题就迎刃而解了。(a1,a2,. ,ai.an)基本要求:(1) 人数n、每人的正整数密码、首次报数人编号i、初始报数上限值m均由键盘输入。(2) 参照线性表的抽象数据类型定义,设计本实验的抽象数据

5、类型。(3) 根据你设计的抽象数据类型,分别用顺序存储结构和链式存储结构实现约瑟夫环问题。并请分别将顺序存储结构的程序存放在文件test6_Seq.h(基本操作函数)、test6_Seq.cpp(主函数)中,链式存储结构的程序存放在文件test6_Link.h(基本操作函数)、test6_Link.cpp(主函数)中。接下来思考如何针对约瑟夫环问题建立一个单向循环链表。前面讲的循环链表存在着一些缺点,如添加和删除结点时必须遍历整个链表。添加结点问题在使用尾指针代替头指针后得到了很好的解决,而由于删除结点时必须寻找其前驱结点而导致链表的遍历则需要另外考虑,是否可以使用当前结点。上面提到了元素的访

6、问,在链表中,大多数是通过链表的头指针依次查找结点并处理数据。单向链表的各种操作非常简单并不需要像顺序表那样移动元素。此外,需要对读到m的人的信息进行删除,删除操作很简单,它只是把删除点前驱结点的指针域指向删除点后继结点。这里需要注意被删除的结点并没有在内存中真正删除。 3 程序代码#include #include #define N 41 /总人数#define M 3 /报数大小#define START 0 / 开始人数所在位置struct Linklist int data;struct Linklist *link; LNodeN;typedef struct Linklist L

7、inklist;typedef Linklist *link;int main(void)int i;link p;for (i = 0; i N; i+) LNodei.data = i + 1;if (i link != p) for (i = 1; i link; p - link = p - link - link; /报中数字的人出列printf(第%d人出列n, p - link - data);p = p - link;getchar();return 0;4程序调试约瑟夫问题实现算法分析:采用单项循环链表的数据结构,即将链表的尾元素指针指向链首元素,每一个结点除了指针域外,还有

8、两个域分别存放每一个人的编号和所持有的密码。解决问题的基本步骤如下。建立n个结点(无头结点)的单向循环链表。从链表第一个结点起循环计数,寻找第m个结点。输出该结果点的id值将该结点的password作为新的m值,删除该结点。根据m值不断从循环链表中删除结点,直到链表为空。 5小结 这次课程设计心得收获:一开始接触课程设计感觉真的很难,很多都不懂,不光是逻辑方面的问题,还有就是不具备动手能力,看到不会的,心里就会很乱,甚至感到焦虑。比如这个题目,刚开始,想法挺多,但考虑如何从逻辑上实现它,顺序表必须占用一整块预先分配的存储空间,而链表则不需要。链表在逻辑上相邻的元素在物理位置上可以不相邻,就好比使用排队机进行排队的银行,人们办理业务的顺序是由手上的小纸条的号码来决定的。在许多特定的场合,使用使用链表优于使用顺序表。 要如何编写程序,可以说几乎是无从下手,参考其他书籍,仿照他们一步一步做下来后,现在对单链表的一些操作熟练了许多。使我明白了,光靠理论知识是远远不够的,更多的是要靠实际的动手能力。 在以后的学习中会遇到许多相似的算法设计的问题,需要我们多了解有关算法的基本设计思想,以及实现算法的详细步骤。 在以后的学习过程中,要认真学会专业课,多在实践中锻炼自己。在写编程时,多一些耐心,避免浮躁。同时考虑问题要全面。在课余时间多在机上调试。

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

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