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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

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

1、1、设计题目 猴子吃桃子问题 有一群猴子摘了一堆桃子,他们每天都吃当前桃子的一半且再多吃一个,到了第 10 天就只余下一个桃子。用多种方法实现求出原来这群猴子共摘了多少个桃子。二、运行环境(软、硬件环境)VC+6.0 PC 电脑一台3、算法的需求分析 1) 采用数组数据结构实现上述求解2) 采用链数据结构实现上述求解3) 采用递归实现上述求解4) 如果采用 4 种方法者,适当加分/用户界面int Desk(int n)printf(“*n“);printf(“| 欢迎进入猴子吃桃子系统 |n“);printf(“| 1-数组法 2-链表法 3-递归法 4-二叉树法 5-退出 |n“);prin

2、tf(“*n“);printf(“请输入要选择的方法: “);scanf(“%d“,getchar();system(“cls“); /刷新屏幕while(n5)printf(“*输入错误 ! 请重新输入*n“);scanf(“%d“,return n;四、算法概要设计/采用链数据结构 (栈) 实现上述求解typedef structint *top;int *base;stack;/初始化一个栈stack Init(stack *s)s-base=(int *)malloc(STACK_SIZE*sizeof(int);if(s-base = NULL)printf(“Init failed

3、 !n“);exit(-1);s-top = s-base;return *s;/二叉树创建一个大小为 DAYS(由用给出)的二叉树,二叉树的左孩子节点存放当天的桃子数,右节点存放数字 1,即为多吃的一个桃子。typedef struct TNodeint data;struct TNode *lchild;struct TNode *rchild;tree;/创建一个二叉树tree CreatTree(tree *T) /T 为指针类型 int n=0,i=0;tree *p,*pr,*T1;T=(tree *)malloc(sizeof(TNode);T1=T;T-data=1; /根节点

4、内的数据为第 DAYS 天的桃子数for(i=1; ilchild=NULL;pr-rchild=NULL;p-data=0;pr-data=1;T1-lchild=p;T1-rchild=pr;T1=p;T1-lchild=NULL;T1-rchild=NULL;return *T; /返回 T 的地址/算法框架图NY NY打印共摘的桃子数量 判断是否执行完毕进入猴子吃桃子系统界面开始选择要使用的方法进入该函数判断是否执行 完毕 继续执行5、算法详细设计#include #include #include “peach.h“/函数声明int Desk(int n);void peach_1(

5、void);stack Init(stack *s);void Push(stack *s,int num);void Pop(stack *s,int void peach_2(stack *s);void peach_3(int n,int i);tree CreatTree(tree *T);void calculate(tree *T);void peach_4(tree *T);int main()int data=0;int n=1,i=1;stack s;tree T;s=Init(T=CreatTree(while(1)switch(Desk(n)case 1: peach_1

6、();break;case 2: peach_2(break;case 3: peach_3(n,i);break;case 4: peach_4(break;case 5: exit(0);break;return 0;/头文件代码#define DAYS 10 /定义给定的天数#define STACK_SIZE 5 /栈的容量,实际只用了一个#define TRUE 1#define ERROR 0void peach_3(int n,int i);/用户界面int Desk(int n)printf(“*n“);printf(“| 欢迎进入猴子吃桃子系统 |n“);printf(“|

7、1-数组法 2-链表法 3-递归法 4-二叉树法 5-退出 |n“);printf(“*n“);printf(“请选择要使用的方法: “);scanf(“%d“,getchar();system(“cls“); /刷新屏幕while(n5)printf(“*输入错误 ! 请重新输入*n“);scanf(“%d“,return n;/采用数组数据结构实现上述求解void peach_1(void)int peach50=0;int i=0,j=0;peachDAYS-1=1; /最后一天的桃子数for(i=DAYS ; i0; -i , j=i-1)peachj = 2*(peachi + 1)

8、;printf(“* * * * * * * * * * * * * * * * * * * * *n“);printf(“* 数 组 法 * n“);printf(“* 这群猴子共摘了 %d 个桃子 *n“,peach0);printf(“* * * * * * * * * * * * * * * * * * * * *n“);/采用链数据结构实现上述求解typedef structint *top;int *base;stack;/初始化一个栈stack Init(stack *s)s-base=(int *)malloc(STACK_SIZE*sizeof(int);if(s-base

9、= NULL)printf(“Init failed !n“);exit(-1);s-top = s-base;return *s;/把当天的桃子数进栈void Push(stack *s,int num)*s-top+ = 2*(num + 1);/把前一天的桃子数出栈void Pop(stack *s,int void peach_2(stack *s)int i=0;int num=0;Push(s,1); /先把最后一天的桃子数进栈i+;while(i data=1; /根节点内的数据为第 DAYS 天的桃子数for(i=1; ilchild=NULL;pr-rchild=NULL;p

10、-data=0;pr-data=1;T1-lchild=p;T1-rchild=pr;T1=p;T1-lchild=NULL;T1-rchild=NULL;return *T; /返回 T 的地址/对二叉树进行赋值计算void calculate(tree *T)int i=0; tree *T1,*T2,*T3; /T1,T3 分别为 T2 的左右孩子T2=T;for(i=0; ilchild;T3=T2-rchild;T1-data=2*(T2-data + T3-data);T2=T1;/二叉树遍历最左下角的孩子节点void peach_4(tree *T)calculate(T);wh

11、ile(T-lchild != NULL)T=T-lchild;printf(“* * * * * * * * * * * * * * * * * * * * *n“);printf(“* 二 叉 树 法 *n“);printf(“* 这群猴子共摘了 %d 个桃子 *n“,T-data);printf(“* * * * * * * * * * * * * * * * * * * * *n“);六、算法的测试/主函数#include #include #include “peach.h“/函数声明int Desk(int n);void peach_1(void);stack Init(stac

12、k *s);void Push(stack *s,int num);void Pop(stack *s,int void peach_2(stack *s);void peach_3(int n,int i);tree CreatTree(tree *T);void calculate(tree *T);void peach_4(tree *T);int main()int data=0;int n=1,i=1;stack s;tree T;s=Init(T=CreatTree(while(1)switch(Desk(n)case 1:peach_1();开始函数功能 :1-数组法 2-链表法

13、 3-递归法4-二叉树法 5-退出 选择一个功能执行该功能break;case 2: peach_2( break;case 3:peach_3(n,i);break;case 4:peach_4(break;case 5:exit(0);break;return 0;/采用数组数据结构实现上述求解void peach_1(void)int peach50=0;int i=0,j=0;peachDAYS-1=1; /最后一天的桃子数for(i=DAYS ; i0; -i , j=i-1)peachj = 2*(peachi + 1);printf(“* * * * * * * * * * *

14、* * * * * * * * * *n“);printf(“* 数 组 法 * n“);printf(“* 这群猴子共摘了 %d 个桃子 *n“,peach0);printf(“* * * * * * * * * * * * * * * * * * * * *n“);void peach_2(stack *s)int i=0;int num=0;Push(s,1); /先把最后一天的桃子数进栈i+;while(i lchild != NULL)T=T-lchild;printf(“* * * * * * * * * * * * * * * * * * * * *n“);printf(“* 二

15、 叉 树 法 *n“);printf(“* 这群猴子共摘了 %d 个桃子 *n“,T-data);printf(“* * * * * * * * * * * * * * * * * * * * *n“);7、运行结果分析 1、数组法:创建一个大小为 DAYS 的一维数组 aDAYS,a0,a1.aDAYS-1 分别存放当天的桃子数,其中 an = 2*(an-1 + 1)。2、链表法:创建一个链栈,先把第 DAYS 天的桃子数进栈,然后出栈,把出战的数据num 进行处理,即 num = 2*(num + 1),然后继续进栈,出栈如此反复循环 DAYS 次结束。3、递归法:首先确定递归的终止条件

16、,即 i = DAYS(假设 i 的初始值为 1),循环体为fac(n,i+1),在递归过程中对 n 进行如下处理,n=2*(n + 1)。4、二叉树法:创建一个大小为 DAYS 的二叉树,其中根节点为第 DAYS 天的桃子数,其中根节点的左孩子为上一天的桃子数,右孩子只存一个固定数据,即数字 1。对二叉树作如下处理,对于一个根节点,其左孩子 = 2 *(根节点 + 右孩子) 。经过一系列的调试运行,该程序可以正确执行,并能够按要求完成任务。8、收获及体会通过设计猴子吃桃子这一程序,是我对 C 语言以及数据结构有了更深的了解,通过编写代码,是我学习和掌握了 C 的理论知识和实践程序设计的各种技

17、能。在编写代码时也遇到了很多麻烦,例如在用递归编写时,突然忘了递归在系统栈内是如何运行的,于是我向同学和老师虚心请教。另外在用二叉树时,根节点 T 总是没有正确定位,使其成为了野指针。总而言之,通过这一课程设计的学习,我对 C 程序有了更深的认识。我深信,一个良好的程序员需要不断去敲写代码,在实践中总结经验,从而提高自己的综合实践能力,去为社会最初更大的奉献。最后我要感谢我的同学以及汪文彬老师对我的帮助,我所取得的进步与他们的热心帮助是离不开的。九、主要参考文献:1苏小红 C 语言 大学实用教程 (第二版) 电子工业出版社2数据结构 C 语言版 严蔚敏 清华大学出版社3 C 程序设计 谭浩强 第三版 清华大学出版社

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报