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

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Data organization curriculm project 数据结构课程设计 设计题目: 猴子吃桃子问题 专业班级: 通信工程0804班 学生学号: 0909082421 学生姓名: 王 璐 指导老师: 彭 春 华 完成时间: 2010-06-06 目 录 问题描述……………………………………………….1页 基本要求………………………………………………..1页 程序设计思想………………………………………1---2页 软件模块结构图………………………………………..2页 程序流程图……………………………………………..3页 源程序………………………………………………4---7页 调试分析……………………………………………8---9页 测试数据…………………………………………..9---10页 心得体会…………………………………………11---12页 一.问题描述 这是一个很经典的简易的程序设计题,具体题目为: 有一群猴子摘了一堆桃子,他们每天都吃当前桃子的一半且再多吃一个,到了第10天就只余下一个桃子。用多种方法实现求出原来这群猴子共摘了多少个桃子。 ?二.基本要求 1)采用数组数据结构实现上述求解 2)采用链数据结构实现上述求解 3)采用递归实现上述求解 虽然题目很简单,但是要求用多种方法实现,要求知识比较全面,涉及到数组,链表,函数,指针,结构体,循环等方面的基础知识。 三.程序设计思想 1.分析题目。每天吃当前桃子数目的一半再加一个,所以桃子数目肯定为偶数。用我们所熟悉的函数来表示,即:f(x+1)=f(x)/2-1;其中x代表第多少天。:猴子摘桃子的那天也就是第一天就吃了所摘桃子的一半加一个,所以桃子总数应该为第一天加1再乘以2,等效为f(0)。 2. 实现方法。最容易想到的也是最简单的就是运用函数的递归。给出了边界条件与递归函数,直接调用就可以了。用数组实现,先定义一个一维数组,然后结合循环,也可以求解。如果用链表的话,相对来说要复杂点。先要构建一个动态链表,将头指针赋值给p,p赋值给q,使p, q同时指向链表头,将第十天的桃子数放在链表第一个数据域中,然后移动p,q使后一个数据域中存放的是前一个加1的2倍,即倒过来存放数据。 四.软件模块结构图 猴子吃桃问题用数组实现 猴子吃桃问题 用数组实现 用递归实现 用链表实现 五.程序流程图 开 始选择实现方法数组递归链表 开 始 选择实现方法 数组 递归 链表 输入x=10 输入n n==9输出y n==9 输出y【10】=1 T T Fm=2*(duigui(n+1)+1)i=0 F m=2*(duigui(n+1)+1) i=0 T T 输出m=1FY【 输出m=1 F Y【x-1】=(y【x】+1)*2 输出mx-- 输出m x-- 输出y【x】 输出y【x】 六.源程序 #includestdio.h #includestdlib.h #define NULL 0 typedef int datatype; typedef struct link { datatype tao; struct link *next; }node; void shuzu() { int day[11],i; day[10]=1; for(i=10;i0;i--) { day[i-1]=2*(day[i]+1); printf(%d\t,i); printf(%d\n,day[i]); } printf(the total :%d\n,day[0]); } int digui(int n) { int m; if(n==9) m=1; else m=2*(digui(n+1)+1); printf(%d\t,n+1); printf(%d\n,m); return(m); } node *init_link(node *head) { head=NULL; return(head); } node m; void toutao(node *head) { int i=10; node *p,*q; p=head; m.tao=1; p=m; while(i0) { q=p; q-tao=p-tao; p-next=(node*)malloc(sizeof(node)); p=p-next; p-tao=2*(q-tao+1); printf(%d\t,i); printf(%d\n,q-tao); i--; } printf(the total : %d\n,p-

文档评论(0)

xingyuxiaxiang + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档