网站大量收购独家精品文档,联系QQ:2885784924

数据结构-猴子选大王-课程设计.doc

  1. 1、本文档共7页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
数据结构-猴子选大王-课程设计

? 《数据结构》 课程设计 题目:猴子选大王 ? 需求分析: 猴子选大王是一个很古老经典的题目,融知识性、娱乐性与一体,能让人产生较大的兴趣,因此,编写程序实现之是意见很有意思的事情。 猴子选大王的问题可以归结为筛选和排序的问题,筛选主要是从一群猴子中,比如M个中每次选出一只猴子,该猴子离开;排序主要是第N只猴子离开后,剩下的猴子要重新编号,继续上面的过程,知道选出猴子大王。 为了增强与用户的交互,程序需要一个比较好的操作界面,用户在其中输入猴子总数M和被淘汰猴子数目(游戏规则数字)N,输入要符合要求,即MN,否则要提示错误信息;在点了确定以后要弹出信息提示对话框,告知使用者猴子大王的编号。 概要设计: 1.程序中使用的存储结构: Node结构体 struct node{ int num; struct node *link; } node; 结构体指针变量 node *head,*p,*q; 2.由于本题数据元素的个数不可预知,同时对于报完一次之后对于下一次的报数,由于已经排除了一部分猴子,猴子的顺序被打乱,所以使用链表。链表是动态的,可以在需要的时候增长和减少其长度,而静态数据结构数组是在编译时分派内存的,其大小是不可改变的,而且会出现内存浪费的情况。我认为单循环链表能较好的解决问题,在建立循环链表时,因为链表的大小由输入决定,因此与匹配的结点数也是变化的,所以要进行动态内存分配。 假设猴子的个数是n,m是要淘汰的编号,那么建立一个n长的链表,链表最后一个元素的next指针指向第一个元素,这样就形成一个循环链表,而链表的数据域储存的就是猴子的编号。 3.整体流程图如下: 开? 始 输入M的值 输入N的值 M N 提示输入错误信息 要求重新输入 输出猴子大王的编号 结?? 束 详细设计: 1.程序首先定义一个结构体如下,其中num用来指示猴子的编号;结构体类型的指针link放在链表中操作;以及一个结构体变量node; ?struct node{ int num; struct node *next; }; 2.用链表实现课题功能、程序中的异常处理主要放在“确定”事件响应中实现: typedef struct node NODE; ?NODE *create_link_list(int m) { int i; NODE *head, *p, *q; //if (m==0) return NULL; head = (NODE *) malloc(sizeof(NODE)); p = head; for (i=1; im; i++) { p-num=i; q=(NODE *)malloc(sizeof(NODE)); p-next=q; p=q; } p-num=m; p-next=head; return (head); } NODE *select_king(NODE **head,int m,int n) { NODE *p,*q,*u; int i,d; p=*head; // printf(The header of the list is %d\n,p-num); //指向创建动态链的表头 for(i=m;i1;i--) { // printf(Now,the number of monkey is %d\n,i); //检测当前还有多少只猴子 for(d=1;dn;d++) { q=p; p=q-next; // printf(Monkey %d\n,q-num); //显示此次参与循环的猴子的编号 } u=p-next; q-next=p-next; free(p); p=u; // printf(the next number is %d\n,p-num); //显示下一次循环中的第一个猴子编号 } return(p); //容易出错点,长返回值不能清楚 } 3.该程序的主程序如下: void main() { int a,b; NODE *my_head,*k; printf(请输入猴子个数:\n); scanf(%d,a); printf(请输入游戏规则中的数字:\n); scanf(%d,b); if(a1||b1) printf(您输入的数字超出了规定的范围!\n); else if(b=a) printf(输入游戏中的数字只能小于猴子个数!\n); else

文档评论(0)

zhuwenmeijiale + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

版权声明书
用户编号:7065136142000003

1亿VIP精品文档

相关文档