猴子吃桃子问题数据结构课程Word文档格式.docx

上传人:b****2 文档编号:14969015 上传时间:2022-10-26 格式:DOCX 页数:14 大小:48.65KB
下载 相关 举报
猴子吃桃子问题数据结构课程Word文档格式.docx_第1页
第1页 / 共14页
猴子吃桃子问题数据结构课程Word文档格式.docx_第2页
第2页 / 共14页
猴子吃桃子问题数据结构课程Word文档格式.docx_第3页
第3页 / 共14页
猴子吃桃子问题数据结构课程Word文档格式.docx_第4页
第4页 / 共14页
猴子吃桃子问题数据结构课程Word文档格式.docx_第5页
第5页 / 共14页
点击查看更多>>
下载资源
资源描述

猴子吃桃子问题数据结构课程Word文档格式.docx

《猴子吃桃子问题数据结构课程Word文档格式.docx》由会员分享,可在线阅读,更多相关《猴子吃桃子问题数据结构课程Word文档格式.docx(14页珍藏版)》请在冰豆网上搜索。

猴子吃桃子问题数据结构课程Word文档格式.docx

本部分包括预定义常量和类型,顺序栈的定义,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

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 人文社科

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1