1 / 3
文档名称:

汉诺塔C语言数据结构实验报告.docx

格式:docx   大小:29KB   页数:3页
下载后只包含 1 个 DOCX 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

汉诺塔C语言数据结构实验报告.docx

上传人:miaoshen1985 2021/10/31 文件大小:29 KB

下载得到文件列表

汉诺塔C语言数据结构实验报告.docx

文档介绍

文档介绍:汉诺塔问题
实验目的
假设有三个分别命名为X,Y和Z的塔座,在塔座X上插有n个直径大小各不相同、依小到大编号为1,2,…,n的圆盘,现要求将塔座X上的n个圆盘移至塔座Z上并仍按同样顺序叠排,圆盘移动时必须遵守下列规则:(1)每次只能移动一个圆盘,(2)圆盘可以插在X,Y和Z中任一塔座上,(3)任何时刻都不能将一个较大的圆盘压在较小的圆盘之上。请写一算法,打印出正确的操作步骤。
实验内容
利用顺序栈来实现:
程序要求用户输入初始圆盘数
输出所有移动过程
实验平台
MicrosoftVisual C++
设计流程
用结构体数组来模拟栈的结构,其中no为一种标记,当no值为0时表示可以直接移动一个圆盘,当no值为1时表示需进一步分解;ns表示当前圆盘数X Y Z表示三个塔座。由此得到hanoi函数,此函数将X塔座上的n个盘子借助于Y塔座按自下向上从大到小的顺序转移到Z塔座上。
源代码清单
//#include ""
#include <>
#define MAXNUM 50
typedefstruct
{
int no;
int ns;
charx,y,z;
}Stack;
void Hanoi(Stack st[], int n, char a, char b, char c)
{
int top = 1;
int n1;
char a1, b1, c1;
st[top].no = 1;
st[top].ns = n;
st[top].x = a;
st[top].y = b;
st[top].z = c;
while (top > 0)
{
if (st[top].no == 1)
{
n1 = st[top].ns;
a1 = st[top].x;
b1 = st[top].y;
c1 = st[top].z;
top--;
top++;
st[top].no = 1;
st[top].ns = n1-1;
st[top].x = b1;
st[top].y = a1;
st[top].z = c1;
top++;
st[top].no = 0;
st[top].ns = n1;
st[top].x = a1;
st[top].y = c1;
top++;
st[top].no = 1;
st[top].ns = n1-1;
st[top].x = a1;
st[top].y = c1;
st[top].z = b1;
}
while (top