- 1、本文档共7页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 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
您可能关注的文档
- 教育科研发展五年规划 Microsoft Word 文档.doc
- 教育科研骨干培训材料.doc
- 教育管理专题试卷复习资料,电大.doc
- 教育系统校园安全及信访稳定专项集中整治工作方案.doc
- 教育经济学复习题.doc
- 教育统计学-.doc
- 教育网站设计毕业论文.doc
- 教育要从〞心〞抓起.doc
- 教育论文— 小学英语词汇有效教学策略的研究.doc
- 教育论文:中央教育科学研究所中国德育杂志社.doc
- 金融产品2024年投资策略报告:积极适应市场风格,行为金融+机器学习新发现.pdf
- 交运物流2024年度投资策略:转型十字路,峰回路又转(2023120317).pdf
- 建材行业2024年投资策略报告:板块持续磨底,重点关注需求侧复苏.pdf
- 宏观2024年投资策略报告:复苏之路.pdf
- 光储氢2024年投资策略报告:复苏在春季,需求的非线性增长曙光初现.pdf
- 公用环保2024年投资策略报告:电改持续推进,火电盈利稳定性有望进一步提升.pdf
- 房地产2024年投资策略报告:聚焦三大工程,静待需求修复.pdf
- 保险2024年投资策略报告:资产负债匹配穿越利率周期.pdf
- 政策研究2024年宏观政策与经济形势展望:共识与分歧.pdf
- 有色金属行业2024年投资策略报告:新旧需求共振&工业原料受限,构筑有色大海星辰.pdf
文档评论(0)