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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

数据结构猴子吃桃课程设计.docx

1、数据结构猴子吃桃课程设计课程设计报告书课程名称: 数据结构与算法 题 目: 猴子吃桃子问题 学生姓名: 专 业: 计算机科学与技术 班 别: 学 号: 指导老师: 日 期: 2012 年 12 月 日目 录一、问题描述 2二、基本要求 2三、工具和准备工作 21工具 22准备工作 22.1分析题目 2四、分析与实现 34.1数组实现 342链结构实现 443 递归结构实现 6五、测试与结论 85.1 数组结构算法实现 85.2 链式结构算法实现 85.3 递归算法实现 9六、总结 10一、问题描述有一群猴子摘了一堆桃子,他们每天都吃当前桃子的一半且再多吃一个,到了第10天就只余下一个桃子。用多

2、种方法实现求出原来这群猴子共摘了多少个桃子。二、基本要求1)采用数组数据结构实现上述求解2)采用链式数据结构实现上述求解3)采用递归实现上述求解三、工具和准备工作1工具一台电脑、运行平台是WindonsXP、Visual C+6.02准备工作2.1分析题目猴子每天吃当前桃子的一半加多一个,所以可以设它们总共所摘的桃子有m个。因此用数学的方法可以求出总共的桃子有多少。即:m=2m+2+1(n=1,2,3,9),其中,猴子在前9天里每天所吃的桃子数为:m+2,在前9天里每天所剩下的桃子数为:m+ (n=1,2,3,9)。其实也可以这样想:设猴子总摘了m个桃子。它们第一天吃了个,第二天吃了个,第三天

3、吃了个,第九天吃了个,所以这不难看出第一天吃的桃子是第二天的2倍。因此,令猴子前天吃了个,后天吃了,由题意得: =+1,化简得: =以此为依据实现数组、链式和递归求解。 四、分析与实现4.1数组实现用数组方法实现,先定义一个一维数组,然后用for循环,按照天数的倒序,就可以求解出来了。用数组求解的流程图如下:用数组实现的代码如下:#includevoid shuzu( )printf(“*数组结构算法实现*n”);void main( ) shuzu( ); int day11,i; /定义一个整形数组和变量; day10=1; /day10赋值为1for(i=10;i0;i-) /用for循

4、环实现让天数倒序dayi-1=2*(dayi+1); /给数组赋值printf(“第%d天剩下的桃子数:%dn”,i,dayi); /输出每天剩下的桃子数printf(“猴子们总共所摘的桃子数为:%dn”,day0); /输出桃子总数day042链结构实现用链式数据结构实现,首先定义一个空链表S,产生一个头结点,并将该头结点赋给空链表的地址S;然后把每天的桃子数从链表的第一个结点插入链表S;最后第一天的桃子数被最后一个插入到链表S中,成为链表中的第一个值,并将其赋给t,输出t即是第一天剩下的桃子数。核心代码:创建单链表:struct list int taozi; /定义一个数据域 struc

5、t list *next; /创建链表指针;typedef struct list node;node *head;void lianshi() /创建链表 int i=10; node *S,*p; head=(node *) malloc(sizeof(node); /定义头指针 p=head; int k=1; for(;i0;i-) S=(node *) malloc(sizeof(node); /给链表申请一个空间 S-taozi=k; k=2*(k+1); /计算前一天是后一天加1的2倍 p-next=S; p=S; p-next=NULL; p=head; head=head-n

6、ext; free(p); / 释放p针计算每天剩下的桃子数和猴子们所摘桃子的总数:void shuchu() node *q; int i=10,sum=0,j; q=head; while(q & i0) printf(第%d天剩下的桃子数:%dn,i,q-taozi); j=q-taozi; q=q-next; i-; sum=(2*(j+1); /计算猴子们总共所摘桃子的总数 printf(猴子们所摘桃子的总数:%dn,sum);43 递归结构实现用递归算法实现,就是利用=,定义一个sum函数,然后不断调用自身,最后递归回到函数sum,这样就求得第一天剩下的桃子数了。用递归算法实现的流

7、程图如下:用递归实现的源代码:#includevoid digui( )printf(“*递归算法实现*n”);int sum(int day) /定义sum函数if(day = =10)return 1; else return (sum(day+1)+1)*2; /递归,让变量day每次加1后再乘以2void main() digui( ); int i,j,taozi; /变量声明 for(i=1;i=10;i+) taozi=sum(i); printf(第%d天剩下的桃子数: %dn,i,taozi); j=sum(1); printf(猴子们所摘的桃子总数: %dn,(j+1)*2

8、); /第一天剩下的桃子数加1,后再乘以2就是所摘的桃子总数五、测试与结论5.1 数组结构算法实现数组结构算法的代码运行的结果:用数组这种算法实现比较简单,只要定义一个数组,把每天剩下的桃子数作为数组的元素,利用=这个等式可求出每天剩下的桃子数和所摘的桃子总数。如上图所示猴子们所摘桃子总数为3070个。5.2 链式结构算法实现用链式结构算法的源代码运行的结果:用链式结构算法来求解是比较复杂的,它要涉及单链表的创建和指针的移动。如上图所示猴子们所摘的桃子总数为3070个。5.3 递归算法实现用递归算法实现的源代码的运行结果:用递归算法来求解也是比较简单的,就是首先定义一个sum函数,再利用=这个

9、等式,然后让其不断调用自身,最后递归,这样就求得了每天剩下桃子的个和猴子们所摘桃子的总数。如上图所示所摘桃子的总数为3070个。六、总结猴子吃桃子这个问题,如果用数学公式来求的话会比较复杂,而且运算量也比较大。不过,拿到题目时,不必着急去想用代码怎么运算,而是要先分析题目,找出问题核心所在,然后想出数学公式来求解,最后把所得到的数学公式变为代码,这样做会比直接想代码容易。用一种方法求解出后,偿试用多种方法来求解,这样有助于思维的发散。如果想不到其它的方法,也可以参照别人的,再结合自己所想的,最后再得到属于自己的求解方法;也可以向同学们求助,因为其他同学想的与自己的会有所不同的,他们的想法可能会为你打开另一种思路,让你少走弯路。猴子吃桃的问题用C语言是很容易实现的,只要能理解题目的意思,基本上就能写出数学公式了,也意味着第一步就完成了。接下来就是写代码了,不过代码涉及的内容有点多,需要懂得如何运用数组,创建单链表,理解递归算法的运算过程,因此,在课程设计之前,需要看一下书本相关的内容。虽然课程设计是弄出来了,不过递归算法我还是有点不太理解,需要日后加强理解和学习。

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

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