- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
汉诺塔试验报告
计算机学院
实验报告
课程名称: 数据结构
实验名称: 汉诺塔
学生姓名: 朱孝彬
学生学号: 20110511001
实验日期: 2012
一、实验目的
1.理解数据结构中汉诺塔
2.掌握汉诺塔的C++描述。
二、实验内容
编制的程序
本演示程序用编写,完成的生成,
1)为了实现上述程序功能,需要定义单链表的抽象数据类型: #includestdio.h
#includestdlib.h
#define MaxSize 30
typedef struct
{
int data[MaxSize];
char name;
int top;
}SqStack;
void Move(SqStack * a,SqStack * b);
int Hanoi(int n,SqStack * a,SqStack * b,SqStack * c);
void InitStack(SqStack * s);
int Push(SqStack * s,int e); /*进栈*/
int Pop(SqStack * s,int e); /*出栈*/
void main()
{
int n,i;
SqStack *a,*b,*c;
InitStack(a);
InitStack(b);
InitStack(c);
a-name=A;
b-name=B;
c-name=C;
printf(请输入汉诺塔中圆环的个数n: );
scanf(%d,n);
for(int t=n;t0;t--)
Push(a,t);
printf(\n\t假设有三根柱子A、B、C,开始时A柱子上有1~%d环,并且它们是按照从小到大的顺序放在A柱子上的,按照汉诺塔规则,将A柱子上所有环通过B柱子,移动到C柱子的则移动方法为:\n\n,n);
i=Hanoi(n,a,b,c);
free(a);
free(b);
free(c);
printf(总共需要移动的次数为:%d次\n,i);
}
void InitStack(SqStack * s) /*初始化栈*/
{
s=(SqStack *)malloc(sizeof(SqStack));
s-top=-1;
}
int Push(SqStack * s,int e) /*进栈*/
{
if(s-top==MaxSize-1)
return 0;
s-top++;
s-data[s-top]=e;
return 1;
}
int Pop(SqStack * s,int e) /*出栈*/
{
if(s-top==-1)
return 0;
e=s-data[s-top];
s-top--;
return 1;
}
int Hanoi(int n,SqStack * a,SqStack * b,SqStack * c)
{
static int i=0;
if(n==1)
{
Move(a,c);
i++;
}
else
{
Hanoi(n-1,a,c,b);
Move(a,c);
i++;
Hanoi(n-1,b,a,c);
}
return i;
}
void Move(SqStack * a,SqStack * b)
{
int i;
Pop(a,i);
printf(\t\t\t%d环--%c柱子\n,i,b-name);
Push(b,i);
}
实验结果:
1.当输入2时,运行结果如下:
2. 当输入3时,运行结果如下:
3. 当输入4时,运行结果如下:
4. 当输入5时,运行结果如下:
本次试验中,在解决汉诺塔问题中,结合了最近刚学的栈的知识,并且运用到之前学到的函数的递归的运用,很好的解决了这一类问题。其中,每一个“汉诺塔”就形如一个栈一样,环先进“汉诺塔”的要后出来,所以把它看成一个栈,运用栈的相关算法,实现高效快速的解决汉诺塔问题。
通过本次试验,学会了栈的应用,加深了对栈的理解,知道了栈是一种先进栈的后出栈的储存结构。本次试验让我更好的把书本上的知识运用到具体的例子中来,以及初始化栈、进栈、出栈等等。同时也了解到了汉诺塔问题可以通过栈和函数递归的相关知识来解决,也体会其中算法的奥妙。
7
文档评论(0)