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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

用C编写程序猴子选大王.docx

1、用C编写程序猴子选大王 湖南人文科技学院计算机系 课程设计说明书 课 程 名 称: 数 据 结 构 课 程 代 码: 题 目: 猴 子 选 大 王 年级/专业/班: 06级计算机科学与技术专业一班 学 生 姓 名: 学 号: 06408109 06408102 06408107 06408122 06408103指 导 教 师: 刘 刚 常 开 题 时 间: 2008 年 6 月 16 日完 成 时 间: 2008 年 6 月 29 日摘 要 本文首先介绍顺序表和链表并作以比较,我们分别使用循环队列和循环链表来解决猴子选大王的问题,程序使用了C语言编写,有很少一部分函数是用C+编写的,有比较详

2、细的中文注释并在VC+下调试运行通过。整个程序使用中文界面,并有相应的提示信息,便于操作和程序运行。关键词:循环队列;循环链表; 存储结构Abstract This paper details the difference of sequence list and linklist.We respectively use queue and circular queue and circular linked list to solve the seek elected king of the monkey problem . The procedure write with C langua

3、ge ,a very small part function is used by the C + +,and has chinese explanatory note.Whats more,it was debugged in VC+ debugger and run very well.The whole procedure,with Chinese interface and thecorresponding hints,is convenient to run and easy to be operated.Keywords : circular queue;circular link

4、ed list ; storage structure 数据结构课程设计猴子选大王一、引 言数据结构是一门非常重要的基础学科,但是实验内容大都不能很好的和实际应用结合起来。从而让很多学生认为学习数据结构并没有很大的作用。但本实验运用数据结构的知识,很好的解决了一个对于人脑来说比较烦琐的实际问题。链表是一种以链式结构存储的线性表,特点是数据元素可以用任意的存储单元存储, 线性表中逻辑上相邻的两元素存储空间可以是不连续的。 同时为了表示逻辑关系, 每个数据元素除了存放自身的数据信息外还要存储一个指示其直接后继的信息。队列是一种先进先出的线性表。它只允许在的表的一端进行插入,而在另一端删除元素。循环

5、队列是队列的顺序表示和实现。从时间上考虑顺序表中插入和删除元素的时间复杂度为O(N) , 查找元素的时间复杂度为O(1); 而链表中插入和删除元素的时间复杂度为O(1) , 查找元素的时间复杂度为O(N)。而链表中除了存放自身的数据信息外, 还要存放后继结点的地址信息, 存储密度不高。本设计分别通过一个顺序存储结构和一个链表存储结构,再加适当函数与改变,就简明的解决了猴子选大王这个实际问题,其中顺序存储结构我们使用的是循环队列。依次按要求淘汰猴子一直到找到猴王,并依次显示被淘汰猴子的编号,输出猴王的编号。该程序具有一定的通俗性与实用性,其他类似的算法均可借鉴和参考使用。该程序清单详细具体、全面

6、,为了使组员之间能够很好的理解各自完成的程序,促进组员之间的沟通,我们在程序中添加了较多的注释和说明,具有很强的可读性。二、设计目的与任务1、本课程设计的目的 1) 初步掌握软件开发过程的问题分析、系统设计、程序编码、测试等基本方法和技能并培养学生进行规范化软件设计的能力。2) 训练学生灵活应用所学数据结构的基本知识,熟练的完成问题分析、算法设计、编写程序,求解出指定的问题; 3) 提高综合运用所学的理论知识和方法独立分析和解决问题的能力;4) 训练用系统的观点和软件开发一般规范进行软件开发,巩固、深化学生的理论知识,提高编程水平,并在此过程中培养他们严谨的科学态度和良好的工作作风。5) 使学

7、生会使用各种计算机资料和有关参考资料,提高学生进行程序设计基本能力。2、本课程设计的任务 问题描述:1)分别使用顺序和链表二种存储结构 2)功能实现:一群猴子都有编号,编号是1,2,3 .m ,这群猴子(m个)按照1-m的顺序围坐一圈,从第1开始数,每数到第n个,该猴子就要离开此圈,这样依次下来,直到圈中只剩下最后一只猴子,则该猴子为大王。输入数据:输入m,n 。其中m,n 为整数,nnext=head报号为n的猴子被淘汰,最后剩下的是猴王,输出被淘汰的猴子和猴王while(1)if(i=m) printf(%d号猴被淘汰n,p-num) else /没有报到m的继续报数printf(猴王的编

8、号为:%d,p-num);3)菜单选择函数程序int menu_select() / int x;printf( tt 猴 子 选 大 王 系 统n); printf( tt 1 使用顺序表n); printf( tt 2 使用链表n);printf( tt 请选择:) ;2、详细设计1)使用顺序存储结构实现(1) 输入m,n.m是猴子的总个数,n是小于m的正整数数。(2) 把m只猴子编上好“1,2,3m”然后按照1-m的顺序围坐一圈,从第1开始数,每数到第N个,该猴子就要离开此圈,这样依次下来,直到圈中只剩下最后一只猴子,则该猴子为大王。(3) 输出最后剩下的那只猴子的编号,这猴子就是大王。

9、(4) 对结果进行分析本程序设计中所包括的函数如下:typedef int QElemType;typedef struct SqQueue /定义一个循环队列 、SqQueue;int InitQueue(SqQueue &Q) /初始化 、int EnQueue(SqQueue &Q,QElemType e) /进队列 、 /EnQueue() endint DeQueue(SqQueue &Q,QElemType &e) /出队列 、 /DeQueue() endint QueueLength(SqQueue Q) /返回Q的元素个数,即队列的长度、 / QueueLength() en

10、dvoid exit() void Change(SqQueue &Q)/选大王 int n,m; int e; coutm; for(int j=1;j=m;j+) EnQueue(Q,j); cout从第1个开始数,每数到第n个,该猴子将离开此圈endl; cout请输入n:n; cout被淘汰猴子的顺序为:; if(nm) while(QueueLength(Q)!=1) /当只剩下一个元素时循环结束,依次输出被淘汰猴子编号 for(int i=0;in-1;i+) e=DeQueue(Q,e); EnQueue(Q,e); e=DeQueue(Q,e); coute; while(Q.

11、front!=Q.rear) /循环到最后找出猴王 for(int i=0;in-1;i+) e=DeQueue(Q,e); EnQueue(Q,e); e=DeQueue(Q,e); cout猴王是编号为e的猴子endl; Change(Q);void main() SqQueue Q; InitQueue(Q); Change(Q);2)使用链表存储结构实现(1) 设计一个猴子的结构体, typedef struct monkey(2) 输入m,n.m是猴子的总个数,n是小于m的正整数数。(3) 开辟空间用来存储猴子结构,生成了个猴子结构的链表,并使其循环。head=p=p2=(LINK)

12、malloc(sizeof(Monkey);for(i=1;inext=p; p2=p; p2-next=head;(4) 找出所有被淘汰的猴子编号和猴王的编号,并将其输出。while(1) i+; if(p-next=p) break; if(i=n) i=0; p2-next=p-next; printf(%d,p-num); p=p2-next; else if(i=n-1) p2=p; p=p-next; printf(猴王的编号为:%dn,p-num); 3)主菜单选择程序和主函数int menu_select() /菜单选择函数程序 int x;printf( tt 猴 子 选 大

13、 王 系 统n); printf( tt 1 使用顺序表n); printf( tt 2 使用链表n);printf( tt 请选择:) ; for(;) scanf(%d,&x); if(x2) printf(nt输入错误,重选1-2:); else break; return x; void main()switch(menu_select()case 1: SqQueue Q; InitQueue(Q); Change(Q); break; return; case 2: monkey(); break; return;3、程序清单#include#include#include #in

14、clude # define STACK_INIT_SIZE 100# define STACKINCREMENT 10# define MAXQSIZE 100# define OK 1# define ERROR 0typedef int QElemType;typedef struct SqQueue /定义一个循环队列 QElemType *base; int front; int rear;SqQueue;int InitQueue(SqQueue &Q) /构造一个空队列Q Q.base=(QElemType *)malloc(MAXQSIZE*sizeof(QElemType);

15、 if(!Q.base) return ERROR; /存储分配失败 Q.front=Q.rear=0; return OK;int EnQueue(SqQueue &Q,QElemType e) /进队列 if(Q.rear+1)%MAXQSIZE=Q.front) return ERROR; /队列满 Q.baseQ.rear=e; Q.rear=(Q.rear+1)%MAXQSIZE; return OK; /EnQueue() endint DeQueue(SqQueue &Q,QElemType &e) /出队列 if(Q.front=Q.rear) return ERROR; e=

16、Q.baseQ.front; Q.front=(Q.front+1)%MAXQSIZE; return e; /DeQueue() endint QueueLength(SqQueue Q) /返回Q的元素个数,即队列的长度 return(Q.rear-Q.front+MAXQSIZE)%MAXQSIZE; /QueueLength() endvoid exit()void Change(SqQueue &Q)/选大王 int n,m; int e; coutm; for(int j=1;j=m;j+) EnQueue(Q,j); cout请输入n:n; cout被淘汰猴子的顺序为:; if(

17、nm) while(QueueLength(Q)!=1) /当只剩下一个元素时循环结束,依次输出被淘汰的猴子编号 for(int i=0;in-1;i+) e=DeQueue(Q,e); EnQueue(Q,e); e=DeQueue(Q,e); coute; while(Q.front!=Q.rear) /循环到最后找出猴王 for(int i=0;in-1;i+) e=DeQueue(Q,e); EnQueue(Q,e); e=DeQueue(Q,e); cout猴王是编号为e的猴子endl; Change(Q);typedef struct monkey /设计一个猴子的结构体,该结构体

18、用monkey表示 /link表示该结构体的指针 int num; /它的号码 struct monkey *next; /下个猴子的地址指针 Monkey,*LINK; void monkey() int n,m;printf(请输入猴子总数m的值:n);scanf(%d,&m);printf(请输入n的值:n);scanf(%d,&n);printf(被淘汰猴子的顺序为:);LINK p,head,p2; /定义了三个猴子结构的指针 int i; head=p=p2=(LINK)malloc(sizeof(Monkey);/开辟空间用来存储猴子结构 for(i=1;inext=p; p2=

19、p; p2-next=head;/这步很重要,这样链表变成循环链表了,也就是说链表到了结 /尾它的下个地址就是链表头了如此不停循环下去,就是个圆 p=head; for(i=1;inum=i; /对猴子编号 p=p-next; /指针指向下个猴子 /所有猴子编号结束 i=0; p=head; /又将p指向了链表的头while(1) i+; if(p-next=p)/这是结束条件,你想自己的下一个就是自己本身了,是不是说 /明只剩下自己了,也就是大王了 break; if(i=n) /如果这一个报到了数n i=0; /再次从1开始报数,因为以后要执行i+语句 p2-next=p-next;/将该

20、猴子从链表中拿下 printf(%d,p-num); /这个号码的猴子要被淘汰 p=p2-next;/指针指向下一个猴子 else /没有报到m的继续报数 if(i=n-1) p2=p; p=p-next; printf(猴王的编号为:%dn,p-num); int menu_select() /菜单选择函数程序 int x;printf( tt 猴 子 选 大 王 系 统n); printf( tt 1 使用顺序表n); printf( tt 2 使用链表n);printf( tt 请选择:) ; for(;) scanf(%d,&x); if(x2) printf(nt输入错误,重选1-2

21、:); else break; return x; void main()switch(menu_select()case 1: SqQueue Q; InitQueue(Q); Change(Q); break; return; case 2: monkey(); break; return;4、程序调试与体会程序调试的步骤:1) 调试各个模块函数,并测试模块间参数的传递与调用。2) 调试主函数和对其他模块函数的调用,并检验最后的输出结果。本程序还算比较简单,用链表存储结构不是很复杂,在使用循环链表的程序中最主要的是定义一个结构体,然后构造一个循环链表并为其在结构体中开辟存储空间。但是真正的

22、程序中还要考虑各种限制条件,这就给调试过程带来一些问题,例如在出队列的过程中,可能队列已经为空队列,就要给出该队列为空队列此信息的提示,还有在使用循环队列的程序中我们刚开始只能输出猴王的编号,却不能输出各个被淘汰猴子的编号,后来才发现是循环控制的不对,在使用循环链表的程序中我们刚开始调试根本不出结果,后来发现是在编号和循环函数之前没返回链表的表头。通过本次课程设计,我们学到了很多东西:首先,平时在学理论知识时觉得很简单容易的知识,实践起来并不是那么容易。比如最基础的构造结构体,要完全不出错的用自己的语言输到屏幕上,却要求对相关知识的掌握熟练到一定程度。又如,循环的次数不能多也不能少,否则就会导

23、致输出结果不是所需的。其次,只有理论知识没实践经验是不可能成为一名出色的软件设计师的。理论是实践的基础,实践是对所学知识的巩固与提高,只有理论与实践相结合才能真正掌握知识。再次,我们还懂得了团结精神的重要性。设计思路是最重要的,只有大家讨论出来的设计思路才是清晰的,这是程序设计成功的关键。在本次程序设计过程中,大家共同努力,分工合作,一起到图书馆找资料,找范文,并在网上搜索了大量的资料,共同学习,使得我们共同进步。一个人的力量是有限的,但团结的力量是无穷的。在竞争如此激烈的当今社会,这些东西都是终生实用的,为我们以后的工作和学习奠定了基础。最后,这次程序设计提炼了我们的心理素质。设计过程是一个

24、考验人耐心的过程,不能有丝毫的急躁,马虎。在不影响试验的前提下可以加快进度。必须要有耐心,要有坚持的毅力。程序需要反复调试,其过程很可能相当烦琐,而且在程序调试出来后写报告书也是一个很繁琐的过程,有时花很长时间写出来的报告书还是需要重写,那时心中未免有点灰心,有时还特别想放弃,此时更加需要静下心,查找原因。5、运行结果主菜单函数运行结果如图1所示,主菜单函数是一个选择函数图 1 有两种选择,输入你要选择的一项使用顺序表程序运行结果如图2所示,输入选择1,输入猴子总数和n的值图2 猴子总数为6,n为2,依次被淘汰的猴子是24631号,猴王为5号 使用链表程序运行结果如图3所示,输入选择2,输入猴子总数和n的值图3 猴子总数为9,n为4,依次被淘汰的猴子是48396572号,猴王为1号四、结 论经过将近两周的数据结构课程设计,我们分别使用循环链表和循环队列的一些基本操作终于完成实现猴子选大王的设计,猴子选大王的过程如果用人脑来计算完成的话会十分浪费脑

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2