猴子吃桃子问题大数据结构课程设计
标准文档目录1、 .................................................. 需求分析12、 .................................................. 概要设计12.1. 用数组数据结构实现上述求解 (1)2.2. 用链数据结构实现上述求解 (1)2.3用栈数据结构实现求解 (1)2.4用递归实现上述求解 (2)3、运行环境 (2)3.1硬件环境 (2)3.2软件环境 (2)4、详细设计 (2)4.1系统流程图 (2)4.2用数组数据结构实现上述求解 (3)4.3用链数据结构实现上述求解 (4)4.4用栈数据结构实现求解 (5)4.5用递归实现上述求解 (6)5、调试分析 (7)6、 .................................................. 运行结果7课程设计总结 (8)参考文献 (9)附录: (9)1、需求分析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)Windows XP(2)Microsoft Visual C++6.04、详细设计4.1系统流程图用递归方法实现4.2 用数组数据结构实现上述求解// 计算桃子的个数void taozi(int n,int m){int day[10];// 初始化变量,用数组元素分别存储每天的桃子个数int i;// 控制循环执行的次数day[0]=n;// 最后一天的桃子个数for(i=0;i<10-m;i++)day[i+1]=2*(day[i]+1);// 相邻元素之间的关系printf(" 第%c天的桃子为:%d\n",m,day[10-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){// 当j=1 时,用户可以输入多次想要的数值case 1:printf(" 请输入要求第几天剩下的桃子:\n");scanf("%d",&m); taozi(1,m);break;// 跳出// 当j=0 时,跳出switch 结构case 0: return;break;// 当用户输入除0 和1 以外的数值时,会让你重新输入,直到输入正确为止default: printf(" 输入有误请重新输入!");}}}4.3 用链数据结构实现上述求解// 预定义常量和类型#define NULL 0// 单链表的存储结构typedef struct LNode{int data;// 数据域struct LNode *next;// 指针域}LNode;LNode *L;LNode *p,*s;// 计算桃子的个数int CreateList_L(i nt e,i nt m)//e 是第十天的桃子的个数,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;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 用栈数据结构实现求解// 储存空间初始分配量#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;i<10-m;i++){*s.top=2*(*(s.top-1)+1);// 栈顶元素和刚插入的元素之间的关系s.top++;// 每插入一个栈顶元素,指针就要自加1}printf("第%(:天的桃子为:%d\n",m,*(s.top-1));}4.5 用递归实现上述求解int i=9;// 初始化全局变量// 递归函数int taozi(int x){int y;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] .北京:中国电力出版社,2008[2] 董建寅,黄俊民,黄同成.数据结构实验指导与题解[M] .北京:中国电力出版社,2008[3] 严蔚敏,吴伟民. 数据结构( C 语言版) [M]. 北京:清华大学出版社,2002[4] 刘振鹏,张晓莉,郝杰.数据结构[M] .北京:中国铁道出版社,2003附录:源代码如下1 用数组数据结构编写#include<stdio.h>void taozi(int n,int m){int day[10];int i;day[0]=n;for(i=0;i<10-m;i++)day[i+1]=2*(day[i]+1);printf(" 第%(:天的桃子为:%d\n",m,day[10-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<stdio.h>#include<stdlib.h>#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;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\n",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<stdio.h> #include<stdlib.h>#define STACK_INIT_SIZE 100#define OK 1#define OVERFLOW -2 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){int i;InitStack();*s.top++=e;for(i=0;i<10-m;i++){*s.top=2*(*(s.top-1)+1);s.top++;}printf("第%(:天的桃子为:%d\n",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 用递归编写#include<stdio.h>int i=9;int taozi(int x){int y;while(i>0){y=2*(x+1);i--;taozi(y);printf("%d\n",y);void main(){int a=1; taozi(a); printf("1\n");}。
猴子吃桃子问题 大数据结构课程设计
标准文档目录1、需求分析 (1)2、概要设计 (1)2.1.用数组数据结构实现上述求解 (1)2.2.用链数据结构实现上述求解 (1)2.3 用栈数据结构实现求解 (1)2.4 用递归实现上述求解 (2)3、运行环境 (2)3.1 硬件环境 (2)3.2软件环境 (2)4、详细设计 (2)4.1系统流程图 (2)4.2用数组数据结构实现上述求解 (3)4.3用链数据结构实现上述求解 (4)4.4用栈数据结构实现求解 (5)4.5用递归实现上述求解 (6)5、调试分析 (7)6、运行结果 (7)课程设计总结 (8)参考文献 (9)附录: (9)1、需求分析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函数。
数据结构与算法 猴子吃桃
课程设计说明书课程名称:数据结构与算法设计题目:猴子吃桃问题院系:计算机科学与信息工程系学生姓名:学号:专业班级:指导教师:2010年6月18日课程设计任务书设计题目猴子吃桃问题学生姓名蒋耀辉所在院系计算机科学与信息工程系专业、年级、班08软件工程班设计要求:分别用以下三种方法实现对猴子吃桃问题的求解:(1)数组数据结构(2)链表数据结构(3)递归问题描述如下:有一群猴子摘了一堆桃子,他们每天都吃当前桃子的一半且再多吃一个,到了第十天就只剩下一只桃子,求出它们第一天摘了多少桃子。
学生应完成的工作:以小组为单位,分工合作完成以下任务(1)编写程序实现对上述猴子偷桃问题的求解并运行出结果;(2)在制定期限内提交程序并完成答辩;(3)提交出详细的课程设计说明书。
参考文献阅读:(1)严蔚敏,吴伟民.数据结构(C语言版)—北京:清华大学出版社2007IBSN978-7-302-14751-0;(2)谭浩强.C语言程序教程—北京:清华大学出版社2007.7 IBSN978-7-302-15157-9;(3)(美)(Liang,Y.D)C++程序设计—北京:机械工业出版社 2008.5 IBSN978-7-111-23996-3。
工作计划:1、确定自己负责模块的作用2、写出模块算法3、写出源代码4、验证与修改任务下达日期:2010 年 6 月7 日任务完成日期:2010 年 6 月18 日指导教师(签名):学生(签名):(设计题目)摘要:有一群猴子摘了一堆桃子,他们每天都吃当前桃子的一半且再多吃一个,到了第10天就只余下一个桃子。
用多种方法实现求出原来这群猴子共摘了多少个桃子。
要求:1)采用数组数据结构实现上述求解2)采用链数据结构实现上述求解3)采用递归实现上述求解关键词:数组链递归目录1. 设计背景 (1)1.1时代背景 (1)1.2能力要求 (1)2.设计方案 (1)2.1初步分析 (1)2.2 问题细化 (2)3. 方案实施 (2)3.1初步探讨 (2)3.2 详细过程 (2)4.结果与结论 (3)5. 收获与致谢 (3)6. 参考文献 (3)7. 附件 (4)源程序 (4)1. 设计背景1.1时代背景数据结构是由数据元素依据某种逻辑联系组织起来的。
课程设计-猴子吃桃
湖南工学院数据结构课程设计题目:数据结构实现—猴子吃桃系别:专业:年级:班级:学生:学号:目录●论文提要 (3)●需求分析 (4)●详细设计 (5)⏹数组结构 (5)⏹递归 (7)⏹链表 (9)●调试结果 (11)●调试分析 (12)论文提要初步分析说明数据结构和抽象数类型等基本概念;从抽象数据类型的角度,通过数学应用的分析,把问题进行分析,整理,面后通过观察选择适当的逻辑结构、存储结构入及其相应的算法来解决问题,数据结构课程主要是为了培养我们对数据的抽象能力和对算法在时间和空间和复杂度上进行优化,猴子吃桃这一数学方面的例题是很典型的一道程序例题,在这里主要以C语言作为数据结构和描述语言,分析并采用数组数据结构,递归,链数据结构实现上述问题。
需求分析实现课题——猴子吃桃摘要:猴子吃桃这一典型的数学课题,其主要实现的过程是将其数学课题公式化,用一些简单的数据定义、初使化、通过一系列的条件判断和循环用来实现学数公式的计算机化。
通过C语言基础分析和数据结构初步了解,我们使用C语言,利用C和数据结构的结合使用,让我们在短时间内建立起对数据结构的进一步认识。
然后,形成正确的对算法和优有个的理解观念。
关键词:C语言的基本了解,数据结构的基本了解, 数据中数组的使用,递归调用,用C语言实现数据链表题目:猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个,第二天早上又将剩下的桃子吃掉一半,又多吃了一个。
以后每天早上都吃了前一天剩下的一半零一个。
到第10天早上想再吃时,见只剩下一个桃子了,求第一天共摘了多少?要求:采用数组,递归,链数据结构实现上述求解详细设计1.数组结构把猴子吃桃的天数倒过来看的话,以天数作为数组的下标i,剩下桃子的个数a[i]的递推公式为a[i]=(a[i-1]+1)*2。
a[i]实际代表了倒数第i天剩下的桃子数。
数组结构算法的流程图如图3-1:程序如下:#include<stdio.h>void main(){int i,tao[10];tao[9]=1;//tao[9]代表第10天剩的桃子数for(i=8;i>=0;i--){tao[i]=2*(tao[i+1]+1);}printf("共摘了%d个桃子!\n",tao[0]); }2.链结构建立一个链表,根据每天桃子数与后一天桃子数的关系n=2*n+2,依次将每天的桃子数存进链表中,最后输出第一天的桃子数。
数据结构实现猴子吃桃
《数据结构》课程设计报告(猴子吃桃)学院:东方科技学院班级:08级信息工程1班学号:200841919116姓名:朱旭指导教师:贺细平老师目录一、题目概要 (1)二、基本概念和要点 (1)三、举例分析 (3)四、设计分析 (10)五、运行结果 (10)六、总结体会 (11)课程论文题目学生:朱旭(东方科技学院08级信息工程一班,学号200841919116)一、题目概要实现课题——猴子吃桃摘要:猴子吃桃这一典型的数学课题,其主要实现的过程是将其数学课题公式化,用一些简单的数据定义、初使化、通过一系列的条件判断和循环用来实现学数公式的计算机化。
通过C语言基础分析和数据结构初步了解,我们使用C语言,利用C和数据结构的结合使用,让我们在短时间内建立起对数据结构的进一步认识。
然后,形成正确的对算法和优有个的理解观念。
关键词:C语言的基本了解,数据结构的基本了解, 数据中数组的使用,用C语言实现数据链表题目有一群猴子摘了一堆桃子,他们每天都吃当前桃子的一半且再多吃一个,到了第10天就只余下一个桃子。
用多种方法实现求出原来这群猴子共摘了多少个桃子。
要求 1>链数据结构实现上述求解2>数组数据结构实现上述求解3>递归实现上述求解二、基本概念和要点数据结构的逻辑结构、存储结构及数据运算的含义及其相互关系。
数据结构的两大类逻辑结构和四种常用的存储表示方法。
数据就是指能够被计算机识别、存储和加工处理的信息的载体。
数据元素是数据的基本单位,有时一个数据元素可以由若干个数据项组成。
数据项是具有独立含义的最小标识单位。
如整数这个集合中,10这个数就可称是一个数据元素.又比如在一个数据库(关系式数据库)中,一个记录可称为一个数据元素,而这个元素中的某一字段就是一个数据项。
数据结构的定义虽然没有标准,但是它包括以下三方面内容:逻辑结构、存储结构、和对数据的操作。
这一段比较重要,用自己的语言来说就比如一个表 ( 数据库 ),我们就称它为一个数据结构,它由很多记录 ( 数据元素 )组成,每个元素又包括很多字 ( 数据项 )组成。
安全教育猴子吃桃子教案
教学目标:1. 让学生了解猴子吃桃子的故事,认识到安全的重要性。
2. 培养学生遵守交通规则、防火、防电等安全意识。
3. 提高学生的自我保护能力。
教学重点:1. 猴子吃桃子的故事情节。
2. 安全意识的培养。
教学难点:1. 如何将故事与安全知识相结合。
2. 如何引导学生主动参与,提高安全意识。
教学准备:1. 故事课件或图片。
2. 交通规则、防火、防电等安全知识卡片。
教学过程:一、导入1. 教师讲述猴子吃桃子的故事,引起学生的兴趣。
2. 提问:猴子为什么吃不到桃子?它从中得到了什么教训?二、讲解故事情节1. 教师详细讲解猴子吃桃子的故事,让学生了解猴子吃不到桃子的原因。
2. 引导学生思考:猴子为什么会犯这样的错误?它应该怎么做才能吃到桃子?三、分析故事中的安全知识1. 教师引导学生分析故事中的安全知识,如:a. 遵守交通规则,不闯红灯。
b. 注意防火,不玩火。
c. 注意用电安全,不触碰电源插座。
2. 教师展示安全知识卡片,让学生认识并掌握这些知识。
四、互动环节1. 教师组织学生进行安全知识竞赛,让学生在游戏中巩固所学知识。
2. 学生分组讨论,分享自己在生活中遇到的安全问题及应对方法。
五、总结1. 教师总结故事中的安全知识,强调遵守规则的重要性。
2. 鼓励学生在日常生活中注重安全,提高自我保护能力。
教学反思:1. 本节课通过讲述猴子吃桃子的故事,让学生了解到安全的重要性,培养了他们的安全意识。
2. 互动环节的设计使学生在游戏中学习安全知识,提高了他们的学习兴趣。
3. 教师应关注学生的个体差异,针对不同学生的需求,调整教学策略,提高教学效果。
猴子吃桃问题
软件综合课程设计猴子吃桃问题学生搭配问题二〇一四年六月《猴子吃桃子课程设计》报告一、问题陈述猴子吃桃子问题:有一群猴子摘了一堆桃子,他们每天都吃当前桃子的一半且再多吃一个,到了第10天就只余下一个桃子。
用多种方法实现求出原来这群猴子共摘了多少个桃子。
二、需求分析要求:1.采用数组数据结构实现上述求解;2.采用链数据结构实现上述求解;3.采用递归实现上述求解。
三、概要设计四、详细设计猴子每天都吃当前桃子的一半多一个,假设今天还有n个桃子,则前一天就有(n+1)*2个桃子。
又已知第十天只剩下一个桃子,则可代入以上公式求出第九天的桃子数,以此类推求下去便可得到第一天的桃子数。
1.采用数组数据结构实现上述求解声明一个长度为10的整形数组arr[10],分别存放各天猴子吃前的桃子数。
下图所示arr[0] arr[1]arr[2]arr[3] arr[4]arr[5]arr[6]arr[7] arr[8]arr[9]先将arr[9]赋值为1,用一个循环语句for (int i=9; i>0; i--){ arr[i-1]=2*(arr[i]+1); }为其余各数组元素赋值,则数组元素arr[0]的值便是该问题的解。
2.采用链数据结构实现上述求解 建立单链表,声明一个类用来对链表的结点指针进行定义,在初始化函数中利用头插法创建具有10个元素的链表。
那么N 10便是要求问题的解。
3.采用递归实现上述求解利用一个递归函数来进行求值:依据返回值来记录每一天剩余桃子情况。
int UseRecursion(int n) {int m; if(n==1) m=1; elsem=(UseRecursion(n-1)+1)*2; return m; }五、程序代码1.头文件“MEP.h “ #ifndef MEP_H #define MEP_H#include<iostream> #include<malloc.h> using namespace std; typedef struct LNode {int data;struct LNode *next; }LNode,*LinkList; void UseLinkList();int UseRecursion(int n);int Swicth();void Diaoyong();void UseArray();void Fenxi();void LinkListAnalysis();void RecursionAnalysis();void ArrayAnalysis();static unsigned short arr[10]={0,0,0,0,0,0,0,0,0,1};#endif MEP_H;2.主函数void Diaoyong();void main(){Diaoyong();}3.Diaoyong:调用函数#include"MEP.h"void Diaoyong(){cout<<" --猴子吃桃子问题-- \n\n";cout<<"有一群猴子摘了一堆桃子,他们每天都吃当前桃子的一\n";cout<<"半且再多吃一个,到了第10天就只余下一个桃子。
数据结构猴子吃桃
目录1 问题描述 (1)2 需求分析 (1)3 概要设计 (1)3.1抽象数据类型定义 (1)3.2模块划分 (2)4 详细设计 (3)4.1数据类型的定义 (3)4.2主要模块的算法描述 (3)5 测试分析 (6)6 课程设计总结 (7)参考文献 (8)附录(源程序清单) (9)1 问题描述有一群猴子摘了一堆桃子,他们每天都吃当前桃子的一半且再多吃一个,到了第10天就只余下一个桃子,求原来这群猴子共摘了多少个桃子。
一种采用数组数据结构实现;一种采用栈链数据结构实现;一种采用递归实现上述求解。
2 需求分析(1)由问题可知,题目中知道第十天所剩的桃子数,所以可以及往前算,算出前一天所剩余的桃子数,到第一天时即为总的桃子数,所以可用数组来存每天所剩的桃子数,容易实现求解。
(2)根据问题设第n天的桃子数为f(n),则前一天的桃子数为f(n+1)=f(n)-(f(n)/2+1),化解可得f(n)=2f(n+1)+2,以此为依据实现递归。
(3)由栈与递归的实现可知调用函数各被调用函数之间的链接及信息交换是通过栈来实现的,因此可以用栈模拟函数递归。
即可通过用栈的链表储存结构模拟函数的递归调用过程来实现问题的求解。
3 概要设计3.1抽象数据类型定义栈的抽象数据类型定义AST Stack{数据对象:D={ai|ai∈ElemSet,i=1,2,...,n, n≥0}数据关系:R1={<ai-1,ai>|ai-1,ai∈D,i=2,...,n}约定an端为栈顶,a1端为栈底。
基本操作:InitStack(&S)操作结果:构造一个空栈S。
DestroyStack(&S)初始条件:栈S已存在。
操作结果:栈S被销毁。
ClearStack(&S)初始条件:栈S已存在。
操作结果:将栈S清为空栈。
StackEmpty(S)初始条件:栈S已存在。
操作结果:若栈S为空栈,则返回TRUE,否则FALSE。
猴子吃桃问题
福建工程学院课程设计课程:数据结构课程设计题目:猴子吃桃问题专业:软件工程班级: 1002座号: 5号姓名:蔡梓楠年月日实验题目:猴子吃桃问题一、要解决的问题有一群猴子摘了一堆桃,他们每天都吃当前桃子的一半且在多吃一个,到了第十天就只剩下一个桃子。
用多种方法实现求出原来这群猴子一共摘了多少个桃子。
要求:1.采用数组数据结构实现上述求解2.采用链表数据结构实现上述求解3.采用递归算法实现上述求解4.(个人)采用堆栈数据结构实现上述求解(个人)本程序可实现10天以内第n天的桃子数。
二、算法基本思想描述:本次课程设计要采用回溯思想,因为题目中只告诉你第十天的桃子数量为1,则第九天的桃子数为(1+1)*2,之前几天的桃子树可用此公式m=(n+1)*2(m为前一天桃子数,n 为当天桃子数)公式解决。
若要求第一天到底有几个桃子,可将之前几天的桃子树一一存入各自结构中,然后求出第一天的桃子树;而如果用递归算法,则必须连续十次进行该函数。
三、设计1.数据结构的设计和说明本次试验四个要求中,除了“递归算法”要求不需要特殊存储结构意外,其他三个都要。
typedef int elemtype; /*定义新类型elemtype为int型*/ (1)数组存储结构typedef struct{elemtype data[n];int len;}Sequenlist;(2)链表存储结构typedef struct node{elemtype data;struct node *next;}linklist;(3)堆栈存储结构typedef struct{elemtype data[MAXSIZE];int top;}SeqStack;2.模块结构图及各模块的功能:void main() /*主函数*/ void Digui() /*递归算法*/ void duizhan() /*堆栈存储结构*/ void shuzu() /*数组结构存储*/ void lianbiao() /*链表存储结构*/ 3.关键算法的设计递归算法描述:int z;int digui(int j,int k){z自加1;当z等于输入天数时,返回j;j=(j+1)*2;digui(j,k);}四、源程序清单:#include"malloc.h"#define MAXSIZE 100#define n 100#define NULL 0int z=0;typedef int elemtype;/*定义新类型为elemtype*/typedef struct{elemtype data[MAXSIZE];int top;}SeqStack;/*定义栈类型*/typedef struct{elemtype data[n];int len;}Sequenlist;/*定义数组类型*/typedef struct node{elemtype data;struct node *next;}linklist;/*定义链表类型*/linklist *Initlinklist(linklist *L){L=(linklist *)malloc(sizeof(linklist));L->next=NULL;return(L);}/*初始化链表*/linklist *Creatlinklist(linklist *L){int i,j;linklist *r,*p;r=L;j=1;for(i=0;i<=9;i++){p=(linklist *)malloc(sizeof(linklist));p->data=j;p->next=NULL;r->next=p;r=r->next;j=(j+1)*2;}return(L);}/*链表创建*/Sequenlist *InitList(Sequenlist *L){L=(Sequenlist *)malloc(sizeof(Sequenlist));L->len=0;return(L);}/*初始化数组*/Sequenlist *CreatList(Sequenlist *L){int i,j,k;L->data[0]=1;k=1;for(j=0;j<9;j++){i=(L->data[j]+1)*2;L->data[j+1]=i;L->len++;k++;}L->len=k;return(L);}/*将算好每天的桃子数存入数组*/ SeqStack *InitStack(SeqStack *S){S=(SeqStack *)malloc(sizeof(SeqStack));S->top=-1;return(S);}/*初始化栈*/int Push(SeqStack *S,int item){if(S->top==MAXSIZE-1){printf("Stack overflow\n");return 0;}else{S->data[++S->top]=item;return 1;}}/*进栈*/elemtype Pop(SeqStack *S){if(S->top==-1){printf("Stack is empty.\n");return 0;}else{S->top--;return(S->data[S->top+1]);}}/*出战*/SeqStack *CreatStack(SeqStack *S){int i,j,k;Push(S,1);k=1;for(j=0;j<9;j++){i=(k+1)*2;k=i;Push(S,i);}}/*将算好每天的桃子数存入栈*/int digui(int j,int k){z++;if(z==k) return j;j=(j+1)*2;digui(j,k);}/*利用递归算法计算每天桃数*/void lianbiao()/*数据存储方式为链表*/{linklist *P,*u;int i,k;P=Initlinklist(P);Creatlinklist(P);u=P->next;printf("(链表算法)请输入天数(1-10):");scanf("%d",&k);/*输入天数*/for(i=0;i<10-k;i++){u=u->next;/*寻找第k天桃子数*/}printf("第%d天桃子数为%d\n",k,u->data);printf("\n");}void shuzu()/*数据存储方式为数组*/{int k;Sequenlist *L;L=InitList(L);L=CreatList(L);printf("(数组算法)请输入天数(1-10):");scanf("%d",&k);/*输入天数*/printf("第%d天桃子数为%d\n",k,L->data[10-k]);printf("\n");}void duizhan()/*数据存储方式为堆栈*/{int i,k;SeqStack *S;S=InitStack(S);CreatStack(S);printf("(堆栈算法)请输入天数(1-10):");scanf("%d",&k);/*输入天数*/for(i=0;i<=k-2;i++) Pop(S);printf("第%d天桃子数为%d",k,Pop(S));printf("\n");printf("\n");}void Digui()/*递归算法*/{int k;z=0;printf("(递归算法)请输入天数(1-10):");scanf("%d",&k);/*输入天数*/printf("第%d天桃子数为%d",k,digui(1,11-k));printf("\n");printf("\n");}void print()/*选择列表函数*/{printf("---------请输入你的选择---------\n");printf("-a:数组算法-\n");printf("-b:链表算法-\n");printf("-c:递归算法-\n");printf("-d:堆栈算法-\n");printf("-e:关闭程序-\n");printf("--------------------------------\n");}main(){char c;print();/*打印选择列表*/c=getchar();/*输入选择*/while(c!='e'){switch(c){case 'a': shuzu();break;/*选择用数组存储方式*/case 'b': lianbiao();break;/*选择用链表存储方式*/case 'c': Digui();break;/*计算过程选择用递归算法*/case 'd': duizhan();break;/*选择用堆栈存储方式*/case 'e': return;/*程序结束*/}print();/*打印选择列表*/getchar();c=getchar();}getch();getch();}五、测试数据及测试结果:测试过程:测试开始后,屏幕打印四种方法的选项:输入“a”;屏幕打印:提示输入天数:输入“1”;输出“1534”。
猴子吃桃子问题
数据结构与算法B课程设计任务书学院名称:数学与计算机学院课程代码:__ 6013799______
专业:年级:
一、设计题目
猴子吃桃子问题
二、主要内容
有一群猴子摘了一堆桃子,他们每天都吃当前桃子的一半且再多吃一个,到了第10天就只余下一个桃子。
用多种方法实现求出原来这群猴子共摘了多少个桃子。
三、具体要求及应提交的材料
采用数组数据结构实现上述求解
采用链数据结构实现上述求解
采用递归实现上述求解
如果采用4种方法者,适当加分
用C/C++语言编程实现上述内容,对每个问题写出一个算法实现,并按数学与计算机学院对课程设计说明书规范化要求,写出课程设计说明书,并提交下列材料:
1)课程设计说明书打印稿一份
2)课程设计说明书电子稿一份;
3)源程序电子文档一份。
四、主要技术路线提示
根据不同的数据结构完成。
在此基础上用C/C++实现其操作。
五、进度安排
按教学计划规定,数据结构课程设计为2周,其进度及时间大致分配如下:
六、推荐参考资料
[1] 严蔚敏,吴伟民.数据结构.清华大学出版社出版。
[2] 严蔚敏,吴伟民. 数据结构题集(C语言版) .清华大学出版社.2003年5月。
[3] 唐策善,李龙澎.数据结构(作C语言描述) .高等教育出版社.2001年9月
[4] 朱战立.数据结构(C++语言描述)(第二版本).高等出版社出版.2004年4月
[5] 胡学钢.数据结构(C语言版) .高等教育出版社.2004年8月
[6] 徐孝凯等著.数据结构(C语言描述).清华大学出版社.2004
指导教师签名日期年月日
系主任审核日期年月日。
数据结构课程设计——猴子吃桃问题及二叉树
天津职业技术师范大学课程设计任务书理学院数学0902 班学生张翔(28)课程设计课题:1猴子吃桃问题:有一群猴子摘了一堆桃子,它们每天都吃当前桃子的一半再多吃一个,到了第10天就剩下一个桃子,用多种方法实现求出原来这群猴子共摘了多少桃子。
要求:1)采用数组数据结构实现上述求解;2)采用链式数据结构。
2.实现二叉排序树:要求:用顺序表和二叉链表作为数据结构1)以回车(’\n’)为输入结束标志,输入数列L,生成一棵二叉排序树T;2)对二叉排序树进行中序遍历,输出结果;3)输入元素m,查找二叉排序树T,若存在包含m的结点,则删除该结点,并做中序遍历。
否则显示信息“无m这个结点”。
一、课程设计工作日自 2012 年 2 月 21 日至 2012 年 3 月 2 日二、同组学生:无三、课程设计任务要求(包括课题来源、类型、目的和意义、基本要求、完成时间、主要参考资料等):课题来源:教师提供课题类型:设计课题的目的和意义:通过课程设计了解c语言中结构体的使用以及利用数据结构设计大型程序主要参考资料:黄刘生.数据结构.北京:经济科学出版社,2005黄杨铭.数据结构.北京:科学出版社,2001严蔚敏. 数据结构(C语言版)[M]. 北京:清华大学出版社. 2008.苏光奎.数据结构导学.北京:清华大学出版社,2002百度文库指导教师签字:教研室主任签字:天津职业技术师范大学课程设计评审表理学院数学0902 班学生张翔(28)问题一、猴子吃桃问题具体程序及运行结果如下:#include<stdio.h>#include<stdlib.h>#include <malloc.h>#define NULL 0#define Day 9//**************************************函数声明***********************************************void creat();void print();void array();void End();void display();void fanhui();void display(){ system("cls");printf("\n ******** 猴子吃桃子的问题**********\n");printf("\n ** 1,用数组数据结构的方法实现。
