猴子吃桃子问题 大数据结构课程设计

上传人:沈*** 文档编号:83825824 上传时间:2022-05-02 格式:DOC 页数:15 大小:73KB
返回 下载 相关 举报
猴子吃桃子问题 大数据结构课程设计_第1页
第1页 / 共15页
猴子吃桃子问题 大数据结构课程设计_第2页
第2页 / 共15页
猴子吃桃子问题 大数据结构课程设计_第3页
第3页 / 共15页
点击查看更多>>
资源描述
word目录1、需求分析12、概要设计12.1.用数组数据结构实现上述求解12.2.用链数据结构实现上述求解12.3 用栈数据结构实现求解12.4 用递归实现上述求解23、 运行环境23.1 硬件环境2软件环境24、 详细设计2系统流程图2用数组数据结构实现上述求解3用链数据结构实现上述求解4用栈数据结构实现求解5用递归实现上述求解65、 调试分析76、运行结果7课程设计总结8参考文献9附录:91、需求分析1、 猴子吃桃子问题有一群猴子摘了一堆桃子,他们每天都吃当前桃子的一半且再多吃一个,到了第10天就只余下一个桃子。用多种方法实现求出原来这群猴子共摘了多少个桃子。要求:1)采用数组数据结构实现上述求解2)采用链数据结构实现上述求解3)采用栈实现上述求解4)采用递归实现上述求解2、概要设计 在taozi函数中定义一个一维数组,分别存储每天的桃子个数,根据题目的内容找出各个数之间的关系,用数组元素表示出来,根据用户输入要计算哪一天的桃子,用for循环控制完毕。在main函数中让用户输入要计算的哪一天,调用taozi函数,以便用户可查出任意一天的桃子个数,用switch语句判断用户要执行的功能,然后用while循环控制,直到用户输入0为止。 先写出预定义常量和类型,写出结点的类型定义,创建结点,初始化链表,定义变量并初始化,找出结点与其后继结点之间的联系,然后在主函数中控制。2.3 用栈数据结构实现求解 本局部包括预定义常量和类型,顺序栈的定义,InitStack函数,Push函数,和main函数,在InitStack函数构造一个空栈,在Push函数中调用该函数,并在其中编写控制栈顶指针和栈底指针移动的语句,找出指针所指向的数据之间的关系,在main函数中编写控制循环完毕的语句,最后再用main函数去调用Push函数。2.4 用递归实现上述求解 这种方法跟上述几种不同,在函数的执行函数的过程中,需屡次进展自我调用,递归函数的运行过程类似与多个函数的嵌套调用,只是调用函数和被调用函数是同一个函数,从主函数开始调用,一次更深一层,退出时一步一步返回到上一层,所以不需写控制循环语句,不需要写控制循环语句,比上几种方法简单点。3、 运行环境3.1 硬件环境PC1Windows XP2Microsoft Visual 4、 详细设计猴子吃桃问题的实现用数组结构实现用链数据结构实现用栈数据结构实现用递归方法实现用数组数据结构实现上述求解/计算桃子的个数void taozi(int n,int m) int day10;/初始化变量,用数组元素分别存储每天的桃子个数int i;/控制循环执行的次数day0=n;/最后一天的桃子个数 for(i=0;inext=NULL;/创建一个带头结点的单链表 L-next=p;/插入到表头 L-next-data=e;/初始化第一个结点 for(i=m-1;i0;i-) s=(LNode *) malloc(sizeof(LNode); p-next=s; s-data=2*(p-data+1);/结点与下一结点之间的联系 p=s;/指针P总是指向最后一个结点 s-next=NULL; printf(第%d天的桃子为:%dn,11-m,p-data);用栈数据结构实现求解/储存空间初始分配量#define STACK_INIT_SIZE 100 /顺序栈的定义typedef struct int *base;/栈底指针 int *top;/栈顶指针 int stacksize;/当前已分配的存储空间SqStack;SqStack s;/构造一个空栈int InitStack() s.base=(int *) malloc(STACK_INIT_SIZE * sizeof(int); if(!s.base) exit (OVERFLOW);/存储分配失败 s.top=s.base;/刚开始栈为空 s.stacksize=20; return OK;/计算桃子个数的函数void Push(int e,int m)/ m是要计算的是第几天 int i; InitStack(); *s.top+=e;/给栈底元素初始化 for(i=0;i0) y=2*(x+1); i-;/循环控制条件 taozi(y); printf(%dn,y); 5、 调试分析 1 在用链数据结构实现时,运行时没有显示错误,但输出不是预测的结果,代码如下:for(i=m-1;i0;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:中国电力,20082 董建寅,黄俊民,黄同成数据结构实验指导与题解M:中国电力,20083 严蔚敏,吴伟民. 数据结构C语言版M. :清华大学,20024 X振鹏,X晓莉,郝杰数据结构M:中国铁道,2003附录:源代码如下1 用数组数据结构编写#includevoid taozi(int n,int m) int day10; int i; day0=n; for(i=0;i10-m;i+) dayi+1=2*(dayi+1); printf(第%d天的桃子为:%dn,m,day10-m);void main() int m; printf(请输入要求第几天剩下的桃子:n); scanf(%d,&m); taozi(1,m); while(1) int j; printf(请输入j的值 0:退出 1:继续:n); scanf(%d,&j); switch(j) case 1: printf(请输入要求第几天剩下的桃子:n); scanf(%d,&m); taozi(1,m); break; case 0: return; break; default: printf(输入有误请重新输入!); 2 用链数据结构编写#include#include#define NULL 0typedef struct LNode int data; struct LNode *next;LNode;LNode *L;LNode *p,*s;int CreateList_L(int e,int m) int i; L=(LNode *) malloc(sizeof(LNode); p=(LNode *) malloc(sizeof(LNode); L-next=NULL;/创建头结点 L-next=p; L-next-data=e; for(i=m-1;i0;i-) s=(LNode *) malloc(sizeof(LNode); p-next=s; s-data=2*(p-data+1); p=s;/指针P总是指向最后一个结点 s-next=NULL; printf(第%d天的桃子为:%dn,11-m,p-data);void main() int n; int k;printf(请输入要求第几天剩下的桃子:n); scanf(%d,&n); k=11-n; CreateList_L(1,k); while(1)int j; printf(请输入j的值 0:退出 1:继续:n); scanf(%d,&j); switch(j)case 1:printf(请输入要求第几天剩下的桃子:n); scanf(%d,&n); k=11-n; CreateList_L(1,k); break; case 0: return; break; default: printf(输入有误请重新输入!); 3 用栈数据结构编写#include#include#define STACK_INIT_SIZE 100 #define OK 1#define OVERFLOW -2typedef struct int *base; int *top; int stacksize;SqStack;SqStack s;int InitStack() s.base=(int *) malloc(STACK_INIT_SIZE * sizeof(int); if(!s.base) exit (OVERFLOW); s.top=s.base; s.stacksize=20; return OK;void Push(int e,int m) int i; InitStack(); *s.top+=e; for(i=0;i10-m;i+) *s.top=2*(*(s.top-1)+1); s.top+; printf(第%d天的桃子为:%dn,m,*(s.top-1);void main() int m; printf(请输入要求第几天剩下的桃子:n); scanf(%d,&m); Push(1,m); while(1) int j; printf(请输入j的值 0:退出 1:继续:n); scanf(%d,&j); switch(j) case 1: printf(请输入要求第几天剩下的桃子:n); scanf(%d,&m); Push(1,m); break; case 0: return; break; default: printf(输入有误请重新输入!); 4 用递归编写 #includeint i=9;int taozi(int x)int y;while(i0) y=2*(x+1); i-; taozi(y); printf(%dn,y); void main()int a=1;taozi(a);printf(1n);14 / 15
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 管理文书 > 施工组织


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!