您好,欢迎来到飒榕旅游知识分享网。
搜索
您的当前位置:首页猴子吃桃子问题

猴子吃桃子问题

来源:飒榕旅游知识分享网


数据结构课程设计

班级: 姓名: 学号: 日期:

2011—1—3

目 录

1 问题描述 ................................................................................................. 1 2 需求分析 ................................................................................................. 3 3 概要设计 ................................................................................................. 2 3.1函数应用 2

3.2模块划分 错误!未定义书签。

4 详细设计 ................................................................................................. 3 5 测试分析 ............................................................................................... 10 6 课程设计总结 ...................................................................................... 11

1. 问题描述

猴子吃桃子问题

有一群猴子摘了一堆桃子,他们每天都吃当前桃子的一半且再多吃一个,到了第10天就只余下一个桃子。用多种方法实现求出原来这群猴子共摘了多少个桃子。 要求:

1) 采用数组数据结构实现上述求解 2) 采用链数据结构实现上述求解 3) 采用递归实现上述求解

2 需求分析

1) 2) 3)

根据问题已知第十天剩余桃子数,求总共桃子数,我们先列出方程可知,有后往前推可知道每天剩余桃子数 ,这样来求解。 栈链比较困难,需要跟递归联系,递归实现在说。

递归实现可以有数组上体现f(n)=2f(n+1)+2,跟数组的道理查不多,而栈链实现也需要这个方程,所以整个程序是相通的。

3概要设计 1)函数应用

除了主函数以外大部分都是算法函数,还有栈的输入与输出函数:

void main() Push(&S,&e) Pop(&S,&e) 2)模块划分

本程序包括四个模块:

( 1 ) 主程序模块 void main() {

初始化; 数组求解; 递归求解; 栈链求解;

}

( 2 ) 栈模块——实现栈的抽象数据类型 ( 3 ) 数组模块——实现数组的运用 ( 4 ) 递归模块——实现递归的运用

4 详细设计

#include\"stdio.h\" #include\"stdlib.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\} 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\}

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\ }

5 测试分析

测试数据及结果如下图 :

6 课程设计总结

总的来说这次课程设计还是学到了一些东西,可能还有很多不足的地方,但希望在以后是学习中补足。总结了一下在这次课程设计中学到的东西,一方面除了进一步巩固了平常上课所学到,和以前学到的东西外。另一方面就是自己的不足了,有时一些以前学过的东西自己不会用,用了反而使程序更复杂,所以一开始的程序很复杂,但是在查过资料后改进才有了这个程序,总觉得在思维上与别人有差距,当然也是自己平常用的少,写的少的缘故,所以在以后自己会多多的写程序,并改进程序,使程序简单化。

最后当然也要感谢老师的教导了

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- sarr.cn 版权所有 赣ICP备2024042794号-1

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务