2021年栈结构实现汉诺塔实验报告.docVIP

  • 16
  • 0
  • 约1.67千字
  • 约 6页
  • 2021-08-20 发布于江苏
  • 举报
2021年栈结构实现汉诺塔实验报告 2021年栈结构实现汉诺塔实验报告 PAGE / NUMPAGES 2021年栈结构实现汉诺塔实验报告 数 据 结 构 实 验 报 告 学 院 软件学院 年 级 级 班 级 班 学 号 姓 名 年 3 月 24 日 目录 一、 试验内容……………………………………….1 二、 试验过程……………………………………….X 三、 试验结果……………………………………….X 一、 试验内容: 1、 试验题目: 栈结构实现汉诺塔 2、 试验要求: 有三个柱子A、 B、 C, A柱子上叠放有n个盘子, 每个盘子都比它下面盘自己小一点, 要求借助柱子B, 将柱子A上全部盘子移动到柱子C上。要求一次只能移动一个盘子, 且移动过程中大盘子不能放在小盘子上面, 只能小盘子放在大盘子上面。 3、 试验目标: 了解并掌握栈结构原理和基础操作, 并用利用栈结构实现汉诺塔。了解递归工作过程。 二、 试验过程: 1、 任务分配 2、 设计思想 (1)将A柱子上n-1个盘子借助C柱子移到B柱子上, 把A上剩下一个盘子移到C上, 将B上n-1个盘子借助A移到C上 (2)建立三个栈作为汉诺塔, 利用栈结构“优异后出”特点, 优异栈盘子要后出来 3、 需求分析   (1) 输入形式和输入值范围: 输入盘子个数n   (2) 输出形式: 盘子移动过程及最终移动总次数   (3) 程序所能达成功效: 将A上n个盘子借助B移到C上   (4) 测试数据: 4、 概要设计 1).抽象数据类型 2).算法 a.栈模块: 用来作为汉诺塔存入和去除圆盘, 优异栈圆盘后出来 b.汉诺塔模块: 建立汉诺塔模型(将A上n个盘子借助B移到C上) 其中move函数用于实现圆盘移动 c.主函数模块: 接收处理命令(初始化数据) 5、 具体设计 程序代码(含注释) 6、 调试分析 (1)调试中问题分析: a.在定义汉诺塔函数数据类型时, 开始使用是void, 不过与后面main函数中定义i类型不相符, 且void函数无法返值, 最终改为int型 算法时空分析: a.时间复杂度: 程序所花时间正比于所输出信息行数目, 而信息行数目等价于盘子移动次数, 盘子移动数目为move(n), 所以函数时间复杂度为O(move(n)) b.空间复杂度: 3座塔在任何时候总共拥有盘子个数都是n个, 依据栈结构特点, 只需要申请n个元素空间。 汉诺塔问题复杂性是以n为指数函数, 所以只能接收n值比较小(n20)汉诺塔问题。 7、 测试结果 列出你测试结果, 包含输入和输出。这里测试数据应该完整和严格, 最好多于需求分析中所列。 8、 说明(假如有) 三、 试验结果: (结果分析, 心得体会等) 1.结果分析: 栈结构实现汉诺塔, 充足表现栈结构“优异后出”特点, 利用这一基础特征, 结合递归算法适用, 以达成试验目。 2.心得体会: 这次栈结构实现汉诺塔代码编写给了我深刻体会, 它不仅让我了解了栈结构基础操作和相关知识点。在试验过程中出现了很多bug, 需要不停调试才能找出问题, 取得处理。即使这次试验已经达成了基础目, 不过让我发觉了自己在相关知识点上缺点以及粗心毛病, 在以后学习过程中, 要愈加细心, 多练习, 多思索。 注: 共三大项, 具体每一项内容可依据自己汇报内容分条叙述, 自行安排得立即可。 备注: (正文采取宋体小四, 间距20磅) 以上说明仅供参考。试验汇报从这5部分展开, 具体内容可自由发挥。如有雷同, 均按零分处理。

文档评论(0)

1亿VIP精品文档

相关文档