- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
猴子吃桃子问题
数据结构课程设计
班级:
姓名:
学号:
日期:2011—1—3
目 录
TOC \o 1-2 \h \z \u HYPERLINK \l _Toc248074613 1 问题描述 1
HYPERLINK \l _Toc248074614 2 需求分析 PAGEREF _Toc248074614 \h 1
HYPERLINK \l _Toc248074615 3 概要设计 2
HYPERLINK \l _Toc248074616 3.1函数应用 2
HYPERLINK \l _Toc248074617 3.2模块划分 PAGEREF _Toc248074617 \h 2
HYPERLINK \l _Toc248074618 4 详细设计 3
HYPERLINK \l _Toc248074621 5 测试分析 10
HYPERLINK \l _Toc248074622 6 课程设计总结 11
问题描述
猴子吃桃子问题
有一群猴子摘了一堆桃子,他们每天都吃当前桃子的一半且再多吃一个,到了第10天就只余下一个桃子。用多种方法实现求出原来这群猴子共摘了多少个桃子。
要求:
采用数组数据结构实现上述求解
采用链数据结构实现上述求解
采用递归实现上述求解
2 需求分析
根据问题已知第十天剩余桃子数,求总共桃子数,我们先列出方程可知,有后往前推可知道每天剩余桃子数 ,这样来求解。
栈链比较困难,需要跟递归联系,递归实现在说。
递归实现可以有数组上体现f(n)=2f(n+1)+2,跟数组的道理查不多,而栈链实现也需要这个方程,所以整个程序是相通的。
3概要设计
函数应用
除了主函数以外大部分都是算法函数,还有栈的输入与输出函数:
void main()
Push(S,e)
Pop(S,e)
2)模块划分
本程序包括四个模块:
( 1 ) 主程序模块
void main()
{
初始化;
数组求解;
递归求解;
栈链求解;
}
( 2 ) 栈模块——实现栈的抽象数据类型
( 3 ) 数组模块——实现数组的运用
( 4 ) 递归模块——实现递归的运用
4 详细设计
#includestdio.h
#includestdlib.h
#define N 20
typedef struct node
{ int datax;
int datay;
struct node *next;
}Node;
typedef 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(栈已空\n);
return NULL;
}
p=s;
s=s-next;
free(p);
return s;
}
void Zhanlian(int n)
{
int f;
LinkStack s=NULL;
for(n=1;n=10;n++)
{
if(n==10)
{f=1;
while(s)
{
f=s-datax*f+s-datay;
s=Pop(s);
}
printf(%d\n,f);
}
else
s=Push(s,2,2);
}
}
void suzhu()
{
int i,a[N];
a[10]=1;
for(i=9;i=1;i--)
a[i]=2*a[i+1]+2;
printf(%d\n,a[1]);
}
int fun(int n)
{
if(n==10)
return 1;
else
return(2*fun(n+1)+2);
}
/*主函数*/
void main()
{
int sum;
printf(数组实现:);
suzhu();
printf(栈链实现:);
Zhanlian(1);
printf(递归实现:);
sum=fun(1);
printf(%d\n,sum);
}
5 测试分析
测试数据及结果如下图 :
6 课程设计总结
总的来说这次课程设计还是学到了一些东西,可能还有很多不足的地方,但希望在以后是学习中补足。总结了一下在这次课程设计中学到的东西,一方面除了进一步巩固了平常上课所学到,和以前学到的东西外。另一方面就是自己的不足了,有时一些以前学过的东西自
文档评论(0)