※ 引述《art1 (人,原来不是人)》之铭言:
: 中序 A+B+C 要利用堆叠法转成前序,正确答案是++ABC,因为这样A+B才会先做
: ^ ^
: 第 第
: 二 一
: 个 个
: 加 加
: 号 号
: 可是我想不出在读到第二个加号时要怎样才能不把堆叠内的第一个加号赶出来
: 下一个元素 堆叠 输出
: 无 空的 无
: C 空的 C
: + + C
: B + CB
: + + CB+
: A + CB+A
: 完成 空的 CB+A+
: 很明显这样一定无法输出++ABC的答案
: 请问到底堆叠法要怎样处理才能得出正确答案呢?
放著原来的例子 A+B+C ,先来看 X+Y 就好:
X+Y 转前序是 +XY ,这没什么问题,由左至右先读三个字符 c1,c2,c3,
然后按照顺序输出 c2,c1,c3 即可。
现在令 X = A+B
那么 +XY就变成 +(A+B)Y 这时候 A+B 还没转成前序,
所以如果有其他人(也就是递回)可以帮忙把 A+B 转前序,就解决了!
其他例如 A+B&C*D*E 转前序:
((A+B)&((C*D)*E)) => (&(+AB)(*(*CD)E)) => &+AB**CDE
在每个括号里都是类似 (X)(+)(Y) 转前序的概念
C++:
可处理 运算子为单一字符、算子为 +-*/& 的算式
运算子优先权 (*/) > (+-) > (&)
http://ideone.com/SQj8uf