ImageVerifierCode 换一换
格式:DOCX , 页数:9 ,大小:32.45KB ,
资源ID:3551346      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/3551346.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(数据结构猴子吃桃.docx)为本站会员(b****4)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

数据结构猴子吃桃.docx

1、数据结构猴子吃桃1 问题描述有一群猴子摘了一堆桃子,他们每天都吃当前桃子的一半且再多吃一个,到了第10天就只余下一个桃子,求原来这群猴子共摘了多少个桃子。一种采用数组数据结构实现;一种采用栈链数据结构实现;一种采用递归实现上述求解。2 需求分析(1)由问题可知,题目中知道第十天所剩的桃子数,所以可以及往前算,算出前一天所剩余的桃子数,到第一天时即为总的桃子数,所以可用数组来存每天所剩的桃子数,容易实现求解。(2)根据问题设第n天的桃子数为f(n),则前一天的桃子数为f(n+1)=f(n)-(f(n)/2+1),化解可得f(n)=2f(n+1)+2,以此为依据实现递归。 (3) 由栈与递归的实现

2、可知调用函数各被调用函数之间的链接及信息交换是通过栈来实现的,因此可以用栈模拟函数递归。即可通过用栈的链表储存结构模拟函数的递归调用过程来实现问题的求解。3 概要设计31抽象数据类型定义栈的抽象数据类型定义AST Stack数据对象:D=ai|aiElemSet,i=1,2,.,n, n0数据关系:R1=|ai-1,aiD,i=2,.,n约定an端为栈顶,a1端为栈底。基本操作:InitStack(&S)操作结果:构造一个空栈S。DestroyStack(&S)初始条件:栈S已存在。操作结果:栈S被销毁。ClearStack(&S)初始条件:栈S已存在。操作结果:将栈S清为空栈。StackEm

3、pty(S)初始条件:栈S已存在。操作结果:若栈S为空栈,则返回TRUE,否则FALSE。Push(&S,&e)初始条件:栈S已存在。操作结果:插入元素e为新的栈顶元素。Pop(&S,&e)初始条件:栈S已存在且非空。操作结果:删除S的栈顶元素,并用e返回其值。StackTraverse(S,visit()初始条件:栈S已存在且非空。操作结果:从栈底到栈顶依次对S的每个数据元素调用函数visit(),一旦visit()失败,则操作失败。ADT Stack32模块划分本程序包括四个模块:( 1 ) 主程序模块void main()初始化;数组求解;递归求解;栈链求解;( 2 ) 栈模块实现栈的抽

4、象数据类型( 3 ) 数组模块实现数组的运用( 4 ) 递归模块实现递归的运用4 详细设计41数据类型的定义(1)数组类型#define N int aN;(2)栈类型typedef struct node int datax; int datay; struct node *next;Node,*LinkStack;42主要模块的算法描述( 1 )主函数void main() int sum;printf(数组实现:);suzhu();printf(递归实现:);sum=fun(1);printf(%dn,sum);printf(栈链实现:);Zhanlian(1); ( 2 )利用数组实现

5、求解int aN 用以存每天所下的桃子数,从第10天a10=1向前循环,到第一天,即为总的个数。for(i=9;i=1;i-)ai=2*ai+1+2;( 3 )利用递归实现求解根据题可得出f(n)=2f(n+1)+2,由此可用递归调有函数。int fun(int n)if(n=10)return 1;elsereturn(2*fun(n+1)+2);( 4 )用链栈实现求解由栈与递归的实现可知调用函数各被调用函数之间的链接及信息交换是通过栈来实现的,因此可以用栈模拟函数递归。递归调用中每层递归要把参数用栈来保存,每进入一层递归,就压入栈顶,每退出一层,则出栈。因为f(n)=2f(n+1)+2,

6、即应把参数2,2存入模拟栈中,当出栈时进行运算,并用中间变量f存结果。for(n=1;ndatax*f+s-datay;s=Pop(s);printf(%dn,f);else /*当n不等于10时,进行入栈操作*/s=Push(s,2,2);链栈的操作LinkStack Push(LinkStack s,int a, int b)/*入栈操作*/Node *p;p=(LinkStack)malloc(sizeof(Node);p-datax=a;p-datay=b;p-next=s;s=p;return s;LinkStack Pop(LinkStack s)/*出栈操作*/ LinkStac

7、k p;if(s=NULL)printf(stack is emptyn);return NULL;p=s;s=s-next;free(p);return s;5 测试分析测试数据及结果如图 51: 图 516 课程设计总结通过这次课程设计使我充分的理解了栈的利用并初步学习到了用栈去模拟递归调用,而且对递归调用的细节更加清淅。虽然此次的程序不是很完备,但是总体还是一个比较能体现数据结构知识点能力的程序了,当然只是相对于我这个初学者来说。在刚开始编程的时候,我感到无从下手,但通过学习和查找资料,了解了算法,以这个为基础才开始慢慢写程序,不断改进才最后完成。在此我非常要感谢的是我的指导老师许又泉老

8、师,感谢老师的细心认真的辅导,让我对数据结构这门课程有了更深一步了解,使我了解到数据结构的重要性,并能运用数据结构去想问题和解决问题。参考文献1 黄同成,黄俊民,董建寅数据结构M北京:中国电力出版社,20082 董建寅,黄俊民,黄同成数据结构实验指导与题解M北京:中国电力出版社,20083 严蔚敏,吴伟民. 数据结构(C语言版)M. 北京:清华大学出版社,20024 刘振鹏,张晓莉,郝杰数据结构M北京:中国铁道出版社,2003附录(源程序清单)#includestdio.h#includestdlib.h#define N 20typedef struct node int datax; in

9、t datay; struct node *next;Node,*LinkStack;LinkStack Push(LinkStack s,int a, int b)Node *p;p=(LinkStack)malloc(sizeof(Node);p-datax=a;p-datay=b;p-next=s;s=p;return s;LinkStack Pop(LinkStack s) LinkStack p;if(s=NULL)printf(stack is emptyn);return NULL;p=s;s=s-next;free(p);return s;/*栈链实现*/void Zhanli

10、an(int n)int f;LinkStack s=NULL;for(n=1;ndatax*f+s-datay;s=Pop(s);printf(%dn,f);elses=Push(s,2,2);/*数组实现*/void suzhu()int i,aN;a10=1;for(i=9;i=1;i-)ai=2*ai+1+2;printf(%dn,a1);/*递归实现*/int fun(int n)if(n=10)return 1;elsereturn(2*fun(n+1)+2);/*主函数*/void main()int sum;printf(数组实现:);suzhu();printf(递归实现:);sum=fun(1);printf(%dn,sum);printf(栈链实现:);Zhanlian(1);

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1