急!!!用栈实现汉诺塔问题

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

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个元素。”请问一下这里的2n+1个元素是什么意思?我想不通啊!
还有,哪位仁兄帮我解释下我贴的代码啊。不甚感激!!
...全文
417 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
CodingJunior 2012-04-23
  • 打赏
  • 举报
回复
f(n)=2f(n-1)+1
CodingJunior 2012-04-23
  • 打赏
  • 举报
回复
f(n)=f(n-1)+1
CodingJunior 2012-04-23
  • 打赏
  • 举报
回复
f(n)=f(n-1)+1
赵Andy 2008-09-23
  • 打赏
  • 举报
回复
mark下先
jia_xiaoxin 2008-09-23
  • 打赏
  • 举报
回复
明明是用栈在解决问题,怎么给我的感觉还是在用递归呢??
这里所谓的栈是指一种LIFO的数据存储方式,它可以用数组,链表等方式实现,就象你程序里面的Pole就是封装了这种实现方式.
递归是一种数据的操作方式,也就是一种算法,书上说用栈解决问题,其实是指用栈存储数据,用递归实现.
而且递归的方法本身就是一种操作堆栈的方式.函数调用自己时都是把函数的指针存到堆栈上.
calyn18 2008-09-23
  • 打赏
  • 举报
回复
呵呵,谢谢你回帖,本人实在是太佩服你的搞笑天赋了!
OenAuth.Core 2008-09-22
  • 打赏
  • 举报
回复
就给了10分,问题还挺多的,呵呵。
明明是用栈在解决问题,怎么给我的感觉还是在用递归呢??

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



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

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

还有,哪位仁兄帮我解释下我贴的代码啊。不甚感激!!
这个问题答案比较长,等高人来解答吧

64,649

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧