读书人

急用栈实现汉诺塔有关问题

发布时间: 2012-04-27 11:57:44 作者: rapoo

急!!!用栈实现汉诺塔问题
最近在看数据结构的书,看到关于栈这里,对用栈解决汉诺塔问题百思不得其解,望高手指点一二。现将书上代码贴到下面:

enum TOHop { DOMOVE, DOTOH };

class TOHobj
{
public:
TOHop op;
int num;
Pole start, goal, tmp;

// DOTOH operation
TOHobj(int n, Pole s, Pole g, Pole t)
{
op = DOTOH;
num = n;
start = s;
goal = g;
tmp = t;
}

//DOMOVE operation
TOHobj(Pole s, Pole g)
{
op = DOMOVE;
start = s;
goal = g;
}
};

void TOH(int n, Pole start, Pole goal, Pole tmp, Stack <TOHobj*>& S)
{
S.push(new TOHobj(n, start, goal, tmp));
TOHobj* t;
while (S.pop(t))
{
if (t->op == DOMOVE)
move(t->start, t->goal);
else if (t->num > 0)
{
int num = t>num;
Pole tmp = t->tmp; Pole goal = t->goal;
Poal start = t->start;
S.push(new TOHobj(num-1, tmp, goal, start));
S.push(new TOHobj(start, goal));
S.push(new TOHobj(new-1, start, tmp, goal));
}
delete t;
}
}

明明是用栈在解决问题,怎么给我的感觉还是在用递归呢??
问题补充:《数据结构》的书上说“注意这里用了顺序栈,因为我们知道栈中恰好要存放2n+1[color=#FF0000][/color]个元素。”请问一下这里的2n+1[color=#FF0000][/color]个元素是什么意思?我想不通啊!
还有,哪位仁兄帮我解释下我贴的代码啊。不甚感激!!

[解决办法]
就给了10分,问题还挺多的,呵呵。
明明是用栈在解决问题,怎么给我的感觉还是在用递归呢??

栈是一种数据结构,用来存储东西的,递归是方法,两者又不冲突。
再说了,你用栈的时候还要用到一些循环呀、分支呀等,难到你一点不用其它的,不可能吧


问题补充:《数据结构》的书上说“注意这里用了顺序栈,因为我们知道栈中恰好要存放2n+1个元素。”请问一下这里的2n+1个元素是什么意思?我想不通啊!

这个??很久没看过数据结构了,也不知道了。呵呵。

还有,哪位仁兄帮我解释下我贴的代码啊。不甚感激!!
这个问题答案比较长,等高人来解答吧
[解决办法]
明明是用栈在解决问题,怎么给我的感觉还是在用递归呢??
这里所谓的栈是指一种LIFO的数据存储方式,它可以用数组,链表等方式实现,就象你程序里面的Pole就是封装了这种实现方式.
递归是一种数据的操作方式,也就是一种算法,书上说用栈解决问题,其实是指用栈存储数据,用递归实现.
而且递归的方法本身就是一种操作堆栈的方式.函数调用自己时都是把函数的指针存到堆栈上.

读书人网 >C++

热点推荐