[C语言、C++]数据结构作业:用栈+迭代解决汉诺塔问题

#include <iostream>
using namespace std;
typedef struct {
	int n;
	char a, b, c;
} Quad;
#define InitSize 100
#define StackIncrement 50
typedef Quad ElemType;
typedef struct { //顺序栈定义
	ElemType* elem; //栈数组
	int top; //或ElemType*,栈顶指针
	int size; //栈大小
} SeqStack;
int InitStack(SeqStack& S) { //初始化
	S.elem = new ElemType[InitSize];
	if (!S.elem) exit(1);
	S.top = -1;
	S.size = InitSize;
	return 1;
}
int IsEmpty(const SeqStack& S) {
	//判断栈是否空,空则返回1,否则返回0
	return S.top == -1;
}
int IsFull(const SeqStack& S) {
	//判断栈是否,满则返回1,否则返回0
	return S.top == S.size;
}
int Push(SeqStack& S, ElemType& e) {
	//若栈满返回0, 否则新元素 e 进栈并返回1
	if (IsFull(S)) return 0;
	S.top++; //先移动指针
	S.elem[S.top] = e; //再加入新元素
	return 1;
}
int Pop(SeqStack& S, ElemType& e) {
	//若栈空返回0, 否则栈顶元素退出到e并返回1
	if (IsEmpty(S)) return 0;
	e = S.elem[S.top]; S.top--;
	return 1;
}
int GetTop(const SeqStack& S, ElemType& e) {
	//若栈空返回0, 否则栈顶元素读到e并返回1
	if (IsEmpty(S)) return 0;
	e = S.elem[S.top];
	return 1;
}
void Hanoi(int n, char A, char B, char C) {
	SeqStack S; InitStack(S);
	Quad q;
	q.n = n; q.a = A; q.b = B; q.c = C;
	Push(S, q);
	//初始化完毕
	while (!IsEmpty(S)) {
		Pop(S, q); //取当前问题
		n = q.n; A = q.a; B = q.b; C = q.c;
			if (n == 1) {
				printf("Move disk from peg %c to peg %c\n", A,C);
			}
			else {
				q.n = n - 1; q.a = B; q.b = A; q.c = C;
				Push(S, q); //右
				q.n = 1; q.a = A; q.b = B; q.c = C;
				Push(S, q); //中
				q.n = n - 1; q.a = A; q.b = C; q.c = B;
				Push(S, q); //左
			}
	}
}
int main(){
	char A='A', B='B', C='C';
	int n; cout << "请输入盘子个数:";
	cin >> n;
	Hanoi(3, A, B, C);
}

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值