python堆栈汉诺塔非递归_线性结构实验 —— 堆栈、队列(汉诺塔的非递归实现)详细过程...

线性结构实验 —— 堆栈、队列(汉诺塔的非递归实现)

一、 实验目的

熟练掌握堆栈、队列的两种存储结构实现方式及操作。

练习使用堆栈、队列结构解决问题的能力。

通过算法分析掌握不同存储结构的操作特点。

二、 实验内容和要求

问题描述

汉诺塔的非递归实现借助堆栈以非递归(循环)方式求解汉诺塔的问题(n, a, b, c),即将N个盘子从起始柱(标记为“a”)通过借助柱(标记为“b”)移动到目标柱(标记为“c”),并保证每个移动符合汉诺塔问题的要求。

输入格式

输入为一个正整数N,即起始柱上的盘数。

输出格式

每个操作(移动)占一行,按柱1 -> 柱2的格式输出。

输入样例

3

输出样例:

a -> c

a -> b

c -> b

a -> c

b -> a

b -> c

a -> c

三、算法分析

1. 主流程设计

int main {

输入起始柱上的盘数;

通过借助柱移动盘子到目标柱;

输出盘子从起始柱通过借助柱移动到目标柱的详细步骤;

return 0;

}

2. ADT定义

struct Node //将栈内元素放入一个结构体中

{

char start; //起始柱

char mid; //借助柱

char goal; //目标柱

int num; //起始柱上的盘数

};

typedef int Position; //栈顶位置

typedef struct Node ElementType; //将堆栈的元素类型具体化

//typedef enum { false, true } bool;

/*堆栈的顺序表定义*/

typedef struct SNode* PtrToSNode;

struct SNode

{

ElementType* data; //存储元素的数组

Position Top; //堆栈的栈顶指针

int Maxsize; //堆栈的最大容量

};

typedef PtrToSNode Stack;

Stack CreateStack();

bool IsFull(Stack S);

bool push(Stack S, int n, char a, char b, char c);

bool IsEmpty(Stack S);

ElementType pop(Stack S);

3. 移动流程分析

设计思路:首先起始柱上除了底盘的其他盘子,需要通过目标柱移动到借助柱上,将此时的借助柱看作“目标柱”&

  • 1
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值