




已阅读5页,还剩8页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
2015年数据结构与算法课程设计学 院: 数学与信息科学学院 专 业: 数学与应用数学 班 级: 2013级1班 姓 名: 解坚杰 课题名称: 猴子的选王问题 指导老师: 覃美珍 2015年 8 月 22 日 目录一、问题的描述-二、问题分析-三、数据结构描述-四、算法设计-五、详细程序清单- 六、程序运行结果-七、心得体会-八、参考资料- 猴子选王问题一、问题的描述猴子选王问题求解: 一堆猴子都有编号,编号是1,2,3 .m ,这群猴子(m个)按照1-m的顺序围坐一圈,从第1开始数,每数到第n个,该猴子就要离开此圈,这样依次下来,直到圈中只剩下最后一只猴子,则该猴子为大王。【基本要求】(1)利用单循环链表作为存储结构模拟此过程;(2)输入数据:输入m,n, m,n 为整数,nm;(3)输出形式:中文提示按照m个猴子,数n 个数的方法,输出为大王的猴子是几号 ,建立一个函数来实现此功能。【选做内容】(1)添加在顺序结构上实现的部分;(2)界面设计的优化。二、问题的分析 对题意进行分析后,可以画出整个过程的流程图。 具体流程图: 这个问题属于约瑟夫环问题,我们对这个题目进行具体分析: 假如现在m=5,n=2,即有5只猴子,按照循环数2的方法,我们演变这个过程:第一次:1 2 3 4 5 2号出局 第二次:1 2 3 4 5 4号出局 第三次:1 2 3 4 5 1号出局 第四次:1 2 3 4 5 5号出局最后得到猴王的序号是3号。那么一般化,对于m猴子,n只猴子设计程序三、数据结构描述 以数据结构(C语言)中的循环单链表为主要的设计支柱,利用了C语言简洁紧凑、灵活方便,语法限制不太严格,程序设计自由度大,生成目标代码质量高,程序执行效率高等方面的优点。循环单链表是单链表的另一种形式,其结构特点是链表中最后一个结点的指针域不再是结束标记,而是指向整个链表的第一个结点,从而使链表形成一个环,基于这样的特点,它适合处理具有环形结构的数据元素序列。typedef struct LNode int data; struct Lnode *next;monkey;算法函数中定义了单链表的结构体struct LNode,其中data域用来存放数据素,next域用来存放一个结点的指针。monkey是struct LNode类型的变量。四、算法设计 头文件说明 #include 此程序主要以C语言为编写语言,因此在程序中要用到系统提供的标准库函数中的输入,输出函数,例如:scanf()函数,printf()函数。所以必须在程序开头一行写上#include。 #include 在这个程序中,用到的主要是数据结构中的循环单链表方面的相关知识。我们把由一个数据元素域及一个或若干个指针域组成的结构体称为一个结点。而在单链表中的每个结点,实在需要时才向系统申请的,也就是所谓的动态内存空间申请。动态申请的内存空间,当不再需要时,必须由申请者自己释放。C语言提供了动态申请内存空间的函数malloc()和动态释放内存空间的函数free()。这些函数都包含在头文件malloc.h中。所以也必须在程序开头写上#include。 例如:head=q=p=(monkey *)malloc(sizeof(monkey); 这一句就是申请占用字节个数为sizeof(monkey)的monkey类型的一个结点,并且让head,q,p三个指针同时指向这个结点。 main() 主程序,包括输入输出和主要函数的调用。调用 Link_solve() 用链表解决这个问题的方法。调用Array_solve() 用数组解决这个问题的方法。 typedef int DataType; 我们都知道,没有实际含义的数据元素称作抽象数据元素。在设计时遇到抽象数据元素,我们将用DataType表示该抽象数据元素的数据类型;而当软件设计问题具体确定时,抽象数据元素的数据类型将被具体的数据类型所取代。在本程序中,要求线性表的数据类型为int类型,可以通过重新定义抽象数据元素为int类型,来确定该抽象数据元素的数据类型。 循环链表:首先生成一个空链表,并给n个结点分配空间,让单链表的表尾指针指向头结点则生成一个带有n个结点的循环单链表。再给每只猴子建立顺序的编号。现从第一个结点开始报数,依次顺序查找出报数为m的待出列的结点(猴子)通过q-next=p-next删除该结点后继续运行否则让q成为p的前驱指针。最后当p-next=p时停止运行,得到p所指向的结点即为猴子选出大王的编号。 数组:定义一个空的数组,有足够多的元素并分配空间。给所有元素赋值为1表示猴子存在。执行for循环,淘汰的猴子赋值为0,直到只剩一只猴子,即为猴王。数组处理输出结果nm,重新输入n主菜单输入m,n选择处理方法链表处理输出结果五、详细程序清单#include #include int m,n; typedef int DataType; typedef struct LNode DataType data; struct LNode *next;monkey;/定义结点void Link_solve() int i; int a=m;int count=1;/统计次数monkey *head,*p,*q,*s;head=q=p=(monkey *)malloc(sizeof(monkey); printf(n* 对猴子进行编号:*n);for(i=1;idata=i; p-next=q;/使链表循环起来p=q;printf(第%d位猴子的编号是:%dn,i,i); printf(第%d位猴子的编号是:%dn,i,i);q-next=head; head-data=m; p=head; q=p-next; printf(n); if(m=1)printf(n按照1个猴子,猴子大王的编号是:1n);else if(m!=1) if(n=1) for(i=1;im;i+) printf(第%d次,要删除的猴子号为:%dn,i,i); printf(n按照%d个猴子,数1个数n猴子大王的编号是:%d n,m,m); else for(i=1;inext;q=q-next; if(i=n-1) printf(第%d次,要删除的猴子号为:%dn,count+,q-data);s=q; q=q-next;/q即为被点到的猴子p-next=q;/删除q结点free(s);/释放内存 i=0;/计数器清零,重新开始计数a-; if(a=1) break; printf(n按照%d个猴子,数%d个数n猴子大王的编号是:%d n,m,n,q-data); /此时的结点就是大王 void Array_solve()int a1000;/定义一个较大的数组存储数据int x,count=1,y,i;printf(n* 对猴子进行编号:*n);for(i=0;im;i+)ai=1; printf(n第%d位猴子的编号是:%d,i+1,i+1); printf(nn);x=0;/令x初始值为零y=m;for(i=0;y!=1;i+)/ 执行循环,淘汰的猴子值为0,直到只剩一只猴子,即为猴王 if(ai%m!=0)x+;/计数加1if(x=n&ai%m!=0)ai%m=0;x=0;printf(第%d次,要删除的猴子号为:%dn,count+,i%m+1);y-;/当前的猴子数减1 for(i=0;i=m;i+) /输出值不为0的猴子,即猴王if(ai!=0)printf(n按照%d个猴子,数%d个数n猴子大王的编号是:%d n,m,n,i+1);void main() int select;int x; for(x=0;x19;x+) printf(=); printf(n); printf(t猴子选王问题求解tn); for(x=0;x19;x+) printf(=); printf(nn);printf(* 请输入猴子的总数 m : );scanf(%d,&m);printf(n); printf(* 请输入周期数 n : );do scanf(%d,&n); printf(n); if(mn) printf(m应该大于n,请重新输入n:); while(mm重新输入n七心得体会 本次数据结构课程设计是运用所学知识,锻炼实际解决问题的能力,是对学生实际对数据结构掌
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 包头市2025内蒙古包头市招商投资促进局所属事业单位人才引进1人笔试历年参考题库附带答案详解
- 上海市2025上海应用技术大学大学生心理健康教育中心专职人员招聘2人笔试历年参考题库附带答案详解
- 2025福建晋江市市政工程建设有限公司权属公司招聘6人笔试参考题库附带答案详解
- 2025浙江金华金开宏业产业运营管理有限公司招聘5人笔试参考题库附带答案详解
- 2025年度河南西沟电力有限责任公司招聘工作人员2名笔试参考题库附带答案详解
- 2025年安徽国控资本有限公司社会招聘17人笔试参考题库附带答案详解
- 2025年亳州公用事业发展有限公司古井供水工程项目人员招聘10人笔试参考题库附带答案详解
- 2025山东农科生物科技发展有限公司招聘16人笔试参考题库附带答案详解
- 2025四川虹微技术有限公司招聘软件开发工程师等岗位8人笔试参考题库附带答案详解
- 2025内蒙古锡林郭勒盟阿巴嘎旗城乡建设投资集团有限公司招聘12人笔试参考题库附带答案详解
- 光缆敷设检验批质量验收记录通用表
- 全成本管理探索与实践
- 电烙铁焊接技术培训
- 石群邱关源电路(第1至7单元)白底课件
- GB/T 40529-2021船舶与海洋技术起货绞车
- GB 31603-2015食品安全国家标准食品接触材料及制品生产通用卫生规范
- GA 392-2009警服雨衣
- 关于公布2016年度中国电力优质工程奖评审结果的通知
- 商务礼仪情景剧剧本范文(通用5篇)
- 幼教培训课件:《家园共育体系建构与实施策略》
- 《电子制造技术-电子封装》配套教学课件
评论
0/150
提交评论