解法:
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
沒有留言:
張貼留言