Re: [問題] postfix->infix
※ 引述《funnymean (funnymean)》之銘言:
: 想請問一下
: 要把postfix轉成infix
: 有什麼比較好的方法
: 我想破頭想不出來........ (小弟不才...
: 而且又會遇到像這種的
: 345+*
: -> 3*(4+5)
: 括號都出來了
: 真的很.........!$^&*
: 謝謝大家
原本是 1+6*(8*5+3) 好了,轉 postfix 就是 1685*3+*+
做法其實跟把 postfix 的值算出來的方法很像
假設 Stack 一開始是空的
1 6 8 5 * 3 + * +
Stack:
1 6 8 5 * 3 + * +
數目字 push 進 Stack
Stack:1
1 6 8 5 * 3 + * +
同上
Stack:1 6
... 一直同上到 * 為止 ...
1 6 8 5 * 3 + * +
此時的 Stack 應該會是:
Stack:1 6 8 5
因為碰到 operator *,則從 Stack 中 pop 出兩個值
Stack:1 6 ----> 8 5
將 8 5 和 operator * 結合起來得到 8*5,再放回 Stack
Stack:1 6 (8*5)
1 6 8 5 * 3 + * +
數目字 push 進 Stack
Stack:1 6 (8*5) 3
1 6 8 5 * 3 + * +
碰到 operator +,則從 Stack 中 pop 出兩個值,再做結合
Stack:1 6 ---> (8*5) 3
將這兩個結合起來得到 (8*5)+3,一樣再放回 Stack
Stack:1 6 ((8*5)+3)
1 6 8 5 * 3 + * +
碰到 operator *,一樣從 Stack 中 pop 出兩個值
Stack:1 --> 6 ((8*5)+3)
結合起來得 6*((8*5)+3),放回 Stack
Stack:1 (6*((8*5)+3))
1 6 8 5 * 3 + * +
碰到 operator +,同上
Stack:--> 1 (6*(8*5)+3)
結合起來得 1+(6*((8*5)+3)),放回 Stack
Stack:(1+(6*((8*5)+3)))
1 6 8 5 * 3 + * + End
Stack 裡面應該只有一個值,pop 出來即為結果:(1+(6*((8*5)+3)))
這個就是你要的 infix,如果想要漂亮一點變成 1+6*(8*5+3) 的話也是可以
但這個要怎麼做,就自己想想看吧~~~XD
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 61.59.235.10
※ 編輯: BDFishX 來自: 61.59.235.10 (10/25 11:47)
推
10/25 11:52, , 1F
10/25 11:52, 1F
推
10/25 11:56, , 2F
10/25 11:56, 2F
→
10/25 11:59, , 3F
10/25 11:59, 3F
推
10/25 12:38, , 4F
10/25 12:38, 4F
推
10/25 12:41, , 5F
10/25 12:41, 5F
→
10/25 12:41, , 6F
10/25 12:41, 6F
→
10/25 12:42, , 7F
10/25 12:42, 7F
→
10/25 12:43, , 8F
10/25 12:43, 8F
推
10/25 13:12, , 9F
10/25 13:12, 9F
推
10/25 13:27, , 10F
10/25 13:27, 10F
→
10/25 13:45, , 11F
10/25 13:45, 11F
→
10/25 13:46, , 12F
10/25 13:46, 12F
→
10/25 14:53, , 13F
10/25 14:53, 13F
→
10/25 14:53, , 14F
10/25 14:53, 14F
推
10/25 21:22, , 15F
10/25 21:22, 15F
討論串 (同標題文章)
C_and_CPP 近期熱門文章
PTT數位生活區 即時熱門文章