逆波蘭式,是編程計算四則運算結果的算法。例子:平時寫法a+b(中綴表達式),逆波蘭式ab+。
把中綴表達式編程后綴表達式的法則:
首先需要兩個棧:s1操作數棧,s2運算符棧。當前取的字符為x。
a.如果x是數字,直接壓入s1.
b.如果x是左括號,直接壓入s2.
c.如果x是右括號,把它和距離棧頂最近的左括號之前的運算符,依次壓入操作數棧。左括號舍棄。
d.如果x是+-*/。如果棧頂是左括號,直接壓入s2。否則,如果s2棧頂運算符優先級低于x(不包括等于),x壓入s2.否則,依次彈出棧頂,壓入s1,直到滿足條件為止。
e.重復以上四條。
例子:計算9+(3-1)*3+10/2
s1: 棧底棧頂
s2:棧底棧頂
x=9
s1: 棧底9棧頂
s2:棧底棧頂
x=+
s1: 棧底9棧頂
s2:棧底+棧頂
x=(
s1: 棧底9棧頂
s2:棧底+(棧頂
x=3
s1: 棧底93棧頂
s2:棧底+(棧頂
x=-
s1: 棧底93棧頂
s2:棧底+(-棧頂
x=1
s1: 棧底931棧頂
s2:棧底+(-棧頂
x=)
s1: 棧底931棧頂
s2:棧底+(-棧頂
-從s2彈出,壓入s1.
s1: 棧底931-棧頂
s2:棧底+棧頂
s1中出現運算符,要計算
s1: 棧底92棧頂
s2:棧底+棧頂
x=*
s1: 棧底92棧頂
s2:棧底+棧頂
x=3
s1: 棧底923棧頂
s2:棧底+棧頂
x=+
把=依次從s2彈出壓入s1
s1: 棧底923棧頂
s2:棧底+棧頂
s1: 棧底96棧頂
s2:棧底+棧頂
s1: 棧底96+棧頂
s2:棧底棧頂
s1: 棧底15棧頂
s2:棧底+棧頂
x=10
s1: 棧底15 10棧頂
s2:棧底+棧頂
x=/
s1: 棧底15 10棧頂
s2:棧底+/棧頂
x=2
s1: 棧底15 10 2棧頂
s2:棧底+/棧頂
最后,s2依次出棧,壓入s1
s1: 棧底15 5棧頂
s2:棧底+棧頂
s1: 棧底20棧頂
s2:棧底棧頂
寫在最后的話:知識要弄懂,再簡單也要下苦工。