版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
年4月19日猴子吃桃子问题数据结构课程设计文档仅供参考,不当之处,请联系改正。目录1、需求分析 12、概要设计 12.1.用数组数据结构实现上述求解 12.2.用链数据结构实现上述求解 12.3用栈数据结构实现求解 12.4用递归实现上述求解 23、运行环境 23.1硬件环境 23.2软件环境 24、详细设计 24.1系统流程图 24.2用数组数据结构实现上述求解 34.3用链数据结构实现上述求解 44.4用栈数据结构实现求解 54.5用递归实现上述求解 65、调试分析 76、运行结果 7课程设计总结 8参考文献 9附录: 9
1、需求分析猴子吃桃子问题有一群猴子摘了一堆桃子,她们每天都吃当前桃子的一半且再多吃一个,到了第10天就只余下一个桃子。用多种方法实现求出原来这群猴子共摘了多少个桃子。
要求:1)
采用数组数据结构实现上述求解2)
采用链数据结构实现上述求解3)
采用栈实现上述求解4)
采用递归实现上述求解2、概要设计2.1.用数组数据结构实现上述求解在taozi函数中定义一个一维数组,分别存储每天的桃子个数,根据题目的内容找出各个数之间的关系,用数组元素表示出来,根据用户输入要计算哪一天的桃子,用for循环控制结束。在main函数中让用户输入要计算的哪一天,调用taozi函数,以便用户可查出任意一天的桃子个数,用switch语句判断用户要执行的功能,然后用while循环控制,直到用户输入0为止。2.2.用链数据结构实现上述求解先写出预定义常量和类型,写出结点的类型定义,创立结点,初始化链表,定义变量并初始化,找出结点与其后继结点之间的联系,然后在主函数中控制。2.3用栈数据结构实现求解本部分包括预定义常量和类型,顺序栈的定义,InitStack函数,Push函数,和main函数,在InitStack函数构造一个空栈,在Push函数中调用该函数,并在其中编写控制栈顶指针和栈底指针移动的语句,找出指针所指向的数据之间的关系,在main函数中编写控制循环结束的语句,最后再用main函数去调用Push函数。2.4用递归实现上述求解这种方法跟上述几种不同,在函数的执行函数的过程中,需多次进行自我调用,递归函数的运行过程类似与多个函数的嵌套调用,只是调用函数和被调用函数是同一个函数,从主函数开始调用,一次更深一层,退出时一步一步返回到上一层,因此不需写控制循环语句,不需要写控制循环语句,比上几种方法简单点。3、运行环境3.1硬件环境PC3.2软件环境 (1)WindowsXP (2)MicrosoftVisualC++6.04、详细设计4.1系统流程图猴子吃桃问题的实现猴子吃桃问题的实现用数组结构实现用链数据结构实现用栈数据结构实现用递归方法实现4.2用数组数据结构实现上述求解//计算桃子的个数voidtaozi(intn,intm){intday[10];//初始化变量,用数组元素分别存储每天的桃子个数inti;//控制循环执行的次数day[0]=n;//最后一天的桃子个数for(i=0;i<10-m;i++)day[i+1]=2*(day[i]+1);//相邻元素之间的关系printf("第%d天的桃子为:%d\n",m,day[10-m]);}voidmain(){intm;//用户要计算的是第几天printf("请输入要求第几天剩下的桃子:\n");scanf("%d",&m);taozi(1,m);//调用while(1){ intj;//循环控制条件 printf("请输入j的值0:退出1:继续:\n"); scanf("%d",&j); switch(j){//当j=1时,用户能够输入多次想要的数值 case1: printf("请输入要求第几天剩下的桃子:\n");scanf("%d",&m);taozi(1,m); break;//跳出//当j=0时,跳出switch结构 case0: return; break;//当用户输入除0和1以外的数值时,会让你重新输入,直到输入正确为止 default: printf("输入有误请重新输入!"); }}}4.3用链数据结构实现上述求解//预定义常量和类型#defineNULL0//单链表的存储结构typedefstructLNode{intdata;//数据域structLNode*next;//指针域}LNode;LNode*L;LNode*p,*s;//计算桃子的个数intCreateList_L(inte,intm)//e是第十天的桃子的个数,m是将要计算的是第几天{inti;L=(LNode*)malloc(sizeof(LNode));//生成新结点p=(LNode*)malloc(sizeof(LNode));L->next=NULL;//创立一个带头结点的单链表L->next=p;//插入到表头L->next->data=e;//初始化第一个结点for(i=m-1;i>0;i--){s=(LNode*)malloc(sizeof(LNode));p->next=s;s->data=2*(p->data+1);//结点与下一结点之间的联系p=s;//指针P总是指向最后一个结点s->next=NULL;}printf("第%d天的桃子为:%d\n",11-m,p->data);}4.4用栈数据结构实现求解//储存空间初始分配量#defineSTACK_INIT_SIZE100//顺序栈的定义typedefstruct{int*base;//栈底指针int*top;//栈顶指针intstacksize;//当前已分配的存储空间}SqStack;SqStacks;//构造一个空栈intInitStack(){s.base=(int*)malloc(STACK_INIT_SIZE*sizeof(int));if(!s.base) exit(OVERFLOW);//存储分配失败s.top=s.base;//刚开始栈为空s.stacksize=20;returnOK;}//计算桃子个数的函数voidPush(inte,intm)//m是要计算的是第几天{inti;InitStack();*s.top++=e;//给栈底元素初始化for(i=0;i<10-m;i++){*s.top=2*(*(s.top-1)+1);//栈顶元素和刚插入的元素之间的关系s.top++;//每插入一个栈顶元素,指针就要自加1}printf("第%d天的桃子为:%d\n",m,*(s.top-1));}4.5用递归实现上述求解inti=9;//初始化全局变量//递归函数inttaozi(intx){inty;while(i>0){y=2*(x+1);i--;//循环控制条件taozi(y);printf("%d\n",y);}}5、调试分析1在用链数据结构实现时,运行时没有显示错误,但输出不是预测的结果,代码如下:for(i=m-1;i>0;i--){s=(LNode*)malloc(sizeof(LNode));p->next=s;s->data=2*(p->data+1);s->next=NULL;}在指针的移动时,由于p总是第一个结点,在for循环前已经被赋值,指针P应该总是指向最后一个结点的,因此在这句s->next=NULL前加上一句p=s就行了,就能输出正确结果。2在生成新结点时,一定要用强制类型转换,要不就要出错。不能把s=(LNode*)malloc(sizeof(LNode))写成s=(LNode)malloc(sizeof(LNode));因为它们不属于同一类型。3在用栈数据结构实现的过程中,虽然只有一个错误,但却显示了好多错误。主要原因是由于一个参数是在main函数中定义的,但却被其它函数调用,只要把该参数定义成全局变量就行了。4在用while循环时,由于控制条件的不恰当导致的错误,不过只要再认真分析一下,就正确了。5还有些其它方面的错误,不过只要看一眼,就能改正,是粗心造成的。6、运行结果链数组和栈实现结果:递归实现结果:课程设计总结经过这一周的实践学习,我认识到学好计算机要重视实践操作,不但仅是学习数据结构,以及其它的计算机方面的知识都要重在实践,很多以前学过的东西,在运用时都不能很熟练,也说明理论知识和实践之间的差别。这就告诉了我们在以后的学习过程中要培养自己的动手能力,要将学过的知识转化为实践。作为一个计科专业的学生,经过这周的学习,使我更加明白了动手能力的重要性。在这次的课程设计中,我不断地去找书本知识和查阅其它有关资料,不但巩固了对课本知识的掌握,还有利于以后更好的进步,提高了对课外知识的了解,虽然花费了不少时间,但只要学到有价值的东西,我认为都是值得的。在完成该试验的过程中,我问了同学和老师,还查阅了很多和链表有关系的书籍,经过学习,翻看以前学过的知识,使我明白了我在学习知识上的很多不足。不过在此同时又重新复习了课本,从中学到了许多以前未学到的知识,感觉非常有成就感,让我对自己更加有信心,让我对数据结构这门课程也更感兴趣了,以前我一直感觉枯燥难学的数据结构,现在我也愿意去认真研究学习了。这次数据结构课程设计中,多亏了我的指导老师黄磊老师的悉心教导。在以后的学习过程中,我要认真负责地对待课本中的每一个知识点,进一步充实自己,提高自己。参考文献[1]黄同成,黄俊民,董建寅.数据结构[M].北京:中国电力出版社,[2]董建寅,黄俊民,黄同成.数据结构实验指导与题解[M].北京:中国电力出版社,[3]严蔚敏,吴伟民.数据结构(C语言版)[M].北京:清华大学出版社,[4]刘振鹏,张晓莉,郝杰.数据结构[M].北京:中国铁道出版社,附录:源代码如下1用数组数据结构编写#include<stdio.h>voidtaozi(intn,intm){intday[10];inti;day[0]=n;for(i=0;i<10-m;i++)day[i+1]=2*(day[i]+1);printf("第%d天的桃子为:%d\n",m,day[10-m]);}voidmain(){intm;printf("请输入要求第几天剩下的桃子:\n");scanf("%d",&m);taozi(1,m);while(1){ intj; printf("请输入j的值0:退出1:继续:\n"); scanf("%d",&j); switch(j){ case1: printf("请输入要求第几天剩下的桃子:\n");scanf("%d",&m);taozi(1,m); break; case0: return; break; default: printf("输入有误请重新输入!"); }}}2用链数据结构编写#include<stdio.h>#include<stdlib.h>#defineNULL0typedefstructLNode{intdata;structLNode*next;}LNode;LNode*L;LNode*p,*s;intCreateList_L(inte,intm){inti;L=(LNode*)malloc(sizeof(LNode));p=(LNode*)malloc(sizeof(LNode));L->next=NULL;//创立头结点L->next=p;L->next->data=e;for(i=m-1;i>0;i--){s=(LNode*)malloc(sizeof(LNode));p->next=s;s->data=2*(p->data+1);p=s;//指针P总是指向最后一个结点s->next=NULL;}printf("第%d天的桃子为:%d\n",11-m,p->data);}voidmain(){intn;intk; printf("请输入要求第几天剩下的桃子:\n");scanf("%d",&n);k=11-n;CreateList_L(1,k);while(1){ intj; printf("请输入j的值0:退出1:继续:\n"); scanf("%d",&j); switch(j){ case1: printf("请输入要求第几天剩下的桃子:\n");scanf("%d",&n); k=11-n;CreateList_L(1,k); break; case0: return; break; default: printf("输入有误请重新输入!"); }}}3用栈数据结构编写#include<stdio.h>#include<stdlib.h>#defineSTACK_INIT_SIZE100#defineOK1#defineOVERFLOW-2typedefstruct{int*base;int*top;intstacksize;}SqStack;SqStacks;intInitStack(){s.base=(
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 矿山修复景观设计工程师考试试卷及答案
- 2025山东“才聚齐鲁成就未来”山东高速集团有限公司招聘211人笔试历年参考题库附带答案详解
- 2025安徽亳州机场管理有限公司劳务派遣人员招聘8人笔试历年参考题库附带答案详解
- 2025国家中核北方核燃料元件有限公司招聘笔试历年参考题库附带答案详解
- 2025四川绵阳市奥库科技有限公司招聘硬件工程师等岗位4人笔试历年参考题库附带答案详解
- 2025厦门水务集团(建瓯)城建投资有限公司招聘3人笔试历年参考题库附带答案详解
- 2025内蒙古赤峰林西中国电信招聘营业员20人笔试历年参考题库附带答案详解
- 2025内蒙古中铁六局集团呼和浩特铁路建设有限公司招聘16人笔试历年参考题库附带答案详解
- 2025中国雄安集团有限公司暑期实习生招聘50人笔试历年参考题库附带答案详解
- 2025中国机械工业集团有限公司国机集团总部社会招聘19人笔试历年参考题库附带答案详解
- 医养中心突发事件应急预案
- 2025房屋买卖合同范本(下载)
- 2025年哈尔滨工业大学管理服务岗位招聘考试笔试试题(含答案)
- (2025年标准)山地开路协议书
- 2025年陕西高中学业水平合格性考试化学试卷真题(含答案)
- DB23∕T 3082-2022 黑龙江省城镇道路设计规程
- 江苏棋牌室管理暂行办法
- 聚合工艺作业培训课件
- 酒店安全设施维护规定
- 2024年中国烟草总公司江西省公司考试真题试卷及答案
- 单位见习人员管理制度
评论
0/150
提交评论