首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

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

2012-04-27 
急!!!用栈实现汉诺塔问题最近在看数据结构的书,看到关于栈这里,对用栈解决汉诺塔问题百思不得其解,望高手

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

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就是封装了这种实现方式.
递归是一种数据的操作方式,也就是一种算法,书上说用栈解决问题,其实是指用栈存储数据,用递归实现.
而且递归的方法本身就是一种操作堆栈的方式.函数调用自己时都是把函数的指针存到堆栈上.

热点排行