作者noodleT (面T)
看板Programming
标题Re: [问题] A+B+C 用堆叠法要如何转出 ++ABC 的结果
时间Sat Nov 5 16:34:36 2016
※ 引述《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
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 36.237.93.195
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Programming/M.1478334879.A.66A.html
※ 编辑: noodleT (36.237.93.195), 11/05/2016 16:40:33
1F:推 art1: &在这边是什麽意思阿?61.64.0.230 11/05 20:49
2F:→ noodleT: 就只是运算子。你也可以去除&36.237.93.195 11/05 21:05
3F:→ noodleT: 二进位 0&0=0;0&1=036.237.93.195 11/05 21:06
※ 编辑: noodleT (36.237.93.195), 11/05/2016 21:07:40
4F:推 art1: 如果不用递回而用堆叠来做呢? 61.64.0.230 11/05 22:02
5F:推 art1: 我了解了,转前序时不能使用跟转後序一样的 61.64.0.230 11/06 00:39
6F:→ art1: 规则,也就是进堆叠的优先权只有在大於堆叠 61.64.0.230 11/06 00:40
7F:→ art1: 说错,应该是小於,才需要把堆叠内的运算子 61.64.0.230 11/06 00:41
8F:→ art1: 小於堆叠内运算子的优先权时才把堆叠内的运 61.64.0.230 11/06 00:41
9F:→ art1: 算子输出,而等於时可以继续叠上去 61.64.0.230 11/06 00:41
10F:→ art1: 找到的资料都没特别提出这一点差异,让我以 61.64.0.230 11/06 00:43
11F:→ art1: 为跟後序一样只要小於等於时就要输出运算子 61.64.0.230 11/06 00:43
12F:→ LPH66: 这其实是左结合和右结合的差别 180.177.29.238 11/06 10:06
13F:→ LPH66: 後序做右结合运算子也是要去掉等於 180.177.29.238 11/06 10:06
14F:→ LPH66: 这里只是反过来而已 180.177.29.238 11/06 10:06
15F:→ LPH66: 右结合运算子的例子如次方 180.177.29.238 11/06 10:06
16F:推 art1: 中序转後序时的次方优先权不是更高吗? 61.64.0.230 11/06 14:13
17F:→ art1: 还是你是说计算後序运算式时规则要去掉等於? 61.64.0.230 11/06 14:14
18F:→ LPH66: 这里讲的是结合性, 同优先权时谁先做的问题 180.177.29.238 11/06 16:09
19F:→ LPH66: 加减和乘除是左边先, 但次方却是右边先 180.177.29.238 11/06 16:10
20F:→ LPH66: 例如像 3^4^5 在转後序时就要如此处理 180.177.29.238 11/06 16:10
21F:→ LPH66: 才能得到正确的 345^^ 而非 34^5^ 180.177.29.238 11/06 16:11
22F:推 art1: 感谢解答 61.64.0.230 11/06 23:55