数据结构实验报告汉诺塔
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验报告书
课程名:数据结构
题目:汉诺塔
班级:
学号:
姓名:
一、目的与要求
1)掌握栈与队列的数据类型描述及特点;
2)熟练掌握栈的顺序和链式存储存表示与基本算法的实现;
3)掌握队列的链式存储表示与基本操作算法实现;
4) 掌握栈与队列在实际问题中的应用和基本编程技巧;
4)按照实验题目要求独立正确地完成实验内容(提交程序清单及相关实验数据与运行结果);
5)认真书写实验报告,并按时提交。
二、实验内容或题目
汉诺塔问题。程序结果:给出程序执行过程中栈的变化过程与圆盘的搬动状态。
三、实验步骤与源程序
源程序:
/ *编译环境Visual C++6.0 */
#include "stdafx.h"
#include
#include
void move(int h,char c,char f)
{
printf("%d:%c--->%c\n",h,c,f);
}
void hanoi(int n,char x,char y,char z)
{
if(n==1) move(1,x,z);
else
{
hanoi(n-1,x,z,y);
move(n,x,z);
hanoi(n-1,y,x,z);
}
}
void main(void)
{
int flag;
do
{
printf(" 汉诺塔问题\n\n");
printf("[1] 开始\n");
printf("[2] 退出\n");
printf("1--2请选择:");
scanf("%d",&flag);
printf("\n");
switch(flag)
{
case 1:
printf("输入盘子的总数:");
int total;
scanf("%d",&total);
printf("移动步骤:\n");
hanoi(total,'A','B','C');
break;
case 2:
printf("确认退出吗!Y/N:");
char temp;
cin>>temp;
if(temp=='Y'||temp=='y')
{
flag=3;
printf("谢谢使用!\n\n");
}
break;
default:
printf("您的选择超出范围,1--2请选择!\n");
}
printf("\n\n\n");
}while(flag!=3);
}
四、测试数据与实验结果
图1 输入盘子总数
图2 移动步骤
图3 程序退出
五、结果分析与实验体会
在运行程序时要注意头文件的使用,掌握栈与队列的数据类型描述及特点,以及栈的顺序和链式存储存表示与基本算法的实现。