猴子吃桃子问题数据结构课程Word文档格式.docx
- 文档编号:14969015
- 上传时间:2022-10-26
- 格式:DOCX
- 页数:14
- 大小:48.65KB
猴子吃桃子问题数据结构课程Word文档格式.docx
《猴子吃桃子问题数据结构课程Word文档格式.docx》由会员分享,可在线阅读,更多相关《猴子吃桃子问题数据结构课程Word文档格式.docx(14页珍藏版)》请在冰豆网上搜索。
本部分包括预定义常量和类型,顺序栈的定义,InitStack函数,Push函数,和main函数,在InitStack函数构造一个空栈,在Push函数中调用该函数,并在其中编写控制栈顶指针和栈底指针移动的语句,找出指针所指向的数据之间的关系,在main函数中编写控制循环结束的语句,最后再用main函数去调用Push函数。
2.4用递归实现上述求解
这种方法跟上述几种不同,在函数的执行函数的过程中,需多次进行自我调用,递归函数的运行过程类似与多个函数的嵌套调用,只是调用函数和被调用函数是同一个函数,从主函数开始调用,一次更深一层,退出时一步一步返回到上一层,所以不需写控制循环语句,不需要写控制循环语句,比上几种方法简单点。
3、运行环境
3.1硬件环境
PC
3.2软件环境
(1)WindowsXP
(2)MicrosoftVisualC++6.0
4、详细设计
4.1系统流程图
4.2用数组数据结构实现上述求解
//计算桃子的个数
voidtaozi(intn,intm)
{
intday[10];
//初始化变量,用数组元素分别存储每天的桃子个数
inti;
//控制循环执行的次数
day[0]=n;
//最后一天的桃子个数
for(i=0;
i<
10-m;
i++)
day[i+1]=2*(day[i]+1);
//相邻元素之间的关系
printf("
第%d天的桃子为:
%d\n"
m,day[10-m]);
}
voidmain()
intm;
//用户要计算的是第几天
请输入要求第几天剩下的桃子:
\n"
);
scanf("
%d"
&
m);
taozi(1,m);
//调用
while
(1){
intj;
//循环控制条件
请输入j的值0:
退出1:
继续:
j);
switch(j){
//当j=1时,用户可以输入多次想要的数值
case1:
printf("
break;
//跳出
//当j=0时,跳出switch结构
case0:
return;
break;
//当用户输入除0和1以外的数值时,会让你重新输入,直到输入正确为止
default:
输入有误请重新输入!
"
}
4.3用链数据结构实现上述求解
//预定义常量和类型
#defineNULL0
//单链表的存储结构
typedefstructLNode{
intdata;
//数据域
structLNode*next;
//指针域
}LNode;
LNode*L;
LNode*p,*s;
intCreateList_L(inte,intm)//e是第十天的桃子的个数,m是将要计算的是第几天
{
L=(LNode*)malloc(sizeof(LNode));
//生成新结点
p=(LNode*)malloc(sizeof(LNode));
L->
next=NULL;
//创建一个带头结点的单链表
next=p;
//插入到表头
next->
data=e;
//初始化第一个结点
for(i=m-1;
i>
0;
i--)
{
s=(LNode*)malloc(sizeof(LNode));
p->
next=s;
s->
data=2*(p->
data+1);
//结点与下一结点之间的联系
p=s;
//指针P总是指向最后一个结点
11-m,p->
data);
4.4用栈数据结构实现求解
//储存空间初始分配量
#defineSTACK_INIT_SIZE100
//顺序栈的定义
typedefstruct
int*base;
//栈底指针
int*top;
//栈顶指针
intstacksize;
//当前已分配的存储空间
}SqStack;
SqStacks;
//构造一个空栈
intInitStack()
s.base=(int*)malloc(STACK_INIT_SIZE*sizeof(int));
if(!
s.base)
exit(OVERFLOW);
//存储分配失败
s.top=s.base;
//刚开始栈为空
s.stacksize=20;
returnOK;
//计算桃子个数的函数
voidPush(inte,intm)//m是要计算的是第几天
InitStack();
*s.top++=e;
//给栈底元素初始化
*s.top=2*(*(s.top-1)+1);
//栈顶元素和刚插入的元素之间的关系
s.top++;
//每插入一个栈顶元素,指针就要自加1
printf("
m,*(s.top-1));
4.5用递归实现上述求解
inti=9;
//初始化全局变量
//递归函数
inttaozi(intx)
inty;
while(i>
0)
y=2*(x+1);
i--;
taozi(y);
y);
5、调试分析
1在用链数据结构实现时,运行时没有显示错误,但输出不是预测的结果,代码如下:
{
s->
在指针的移动时,由于p总是第一个结点,在for循环前已经被赋值,指针P应该总是指向最后一个结点的,所以在这句s->
next=NULL前加上一句p=s就行了,就能输出正确结果。
2在生成新结点时,一定要用强制类型转换,要不就要出错。
不能把s=(LNode*)malloc(sizeof(LNode))写成s=(LNode)malloc(sizeof(LNode));
因为它们不属于同一类型。
3在用栈数据结构实现的过程中,虽然只有一个错误,但却显示了好多错误。
主要原因是由于一个参数是在main函数中定义的,但却被其它函数调用,只要把该参数定义成全局变量就行了。
4在用while循环时,由于控制条件的不恰当导致的错误,不过只要再认真分析一下,就正确了。
5还有些其它方面的错误,不过只要看一眼,就能改正,是粗心造成的。
6、运行结果
链数组和栈实现结果:
递归实现结果:
课程设计总结
通过这一周的实践学习,我认识到学好计算机要重视实践操作,不仅仅是学习数据结构,以及其它的计算机方面的知识都要重在实践,很多以前学过的东西,在运用时都不能很熟练,也说明理论知识和实践之间的差别。
这就告诉了我们在以后的学习过程中要培养自己的动手能力,要将学过的知识转化为实践。
作为一个计科专业的学生,通过这周的学习,使我更加明白了动手能力的重要性。
在这次的课程设计中,我不断地去找书本知识和查阅其它有关资料,不仅巩固了对课本知识的掌握,还有利于以后更好的进步,提高了对课外知识的了解,虽然花费了不少时间,但只要学到有价值的东西,我认为都是值得的。
在完成该试验的过程中,我问了同学和老师,还查阅了很多和链表有关系的书籍,通过学习,翻看以前学过的知识,使我明白了我在学习知识上的很多不足。
不过在此同时又重新复习了课本,从中学到了许多以前未学到的知识,感觉非常有成就感,让我对自己更加有信心,让我对数据结构这门课程也更感兴趣了,以前我一直感觉枯燥难学的数据结构,现在我也愿意去认真研究学习了。
这次数据结构课程设计中,多亏了我的指导老师黄磊老师的悉心教导。
在以后的学习过程中,我要认真负责地对待课本中的每一个知识点,进一步充实自己,提高自己。
参考文献
[1]黄同成,黄俊民,董建寅.数据结构[M].北京:
中国电力出版社,2008
[2]董建寅,黄俊民,黄同成.数据结构实验指导与题解[M].北京:
[3]严蔚敏,吴伟民.数据结构(C语言版)[M].北京:
清华大学出版社,2002
[4]刘振鹏,张晓莉,郝杰.数据结构[M].北京:
中国铁道出版社,2003
附录:
源代码如下
1用数组数据结构编写
#include<
stdio.h>
day[0]=n;
2用链数据结构编写
#include<
stdlib.h>
intdata;
intCreateList_L(inte,intm)
L=(LNode*)malloc(s
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 猴子 桃子 问题 数据结构 课程