解法:
a+b*d+c/d => ((a+(b*d))+(c/d)) -> abd*+cd/+
例如(a+b)*(c+d)這個式子,依演算法的輸出過程如下:
| OP | STACK | OUTPUT |
| ( | ( | - |
| a | ( | a |
| + | (+ | a |
| b | (+ | ab |
| ) | - | ab+ |
| * | * | ab+ |
| ( | *( | ab+ |
| c | *( | ab+c |
| + | *(+ | ab+c |
| d | *(+ | ab+cd |
| ) | * | ab+cd+ |
| - | - | ab+cd+* |
PreFix、InFix、PostFix
PreFix(前序式):* + 1 2 + 3 4
InFix(中序式): (1+2)*(3+4)
PostFix(後序式):1 2 + 3 4 + *
(1+2)*(3+4)
後序存取模式:
| 讀取 | 堆疊 |
| 1 | 1 |
| 2 | 1 2 |
| + | 3 // 1+2 後存回 |
| 3 | 3 3 |
| 4 | 3 3 4 |
| + | 3 7 // 3+4 後存回 |
| * | 21 // 3 * 7 後存回 |
---------------------------------------------------------------------------------------------------------------
參考:
1.
http://caterpillar.onlyfun.net/Gossip/AlgorithmGossip/InFixPostfix.htm
2.
http://www2.lssh.tp.edu.tw/~hlf/class-1/lang-c/stack2.htm
沒有留言:
張貼留言
如果久久沒有反應,請直接寄信
應該是我不太會用google blogger 導致有留言過久未處理><
實在深感抱歉..