資料結構中字尾表示式的求解,以及中綴與字尾的轉化過程
阿新 • • 發佈:2019-02-01
表示式的求解是程式中的一個最基本的問題(王道說的)。他實際是一個棧的典型應用。其中,中綴表示式不僅僅注意的事運算的優先順序,還有括號。而後綴表示式的運算子在運算元的後面,在後綴表示式中已考慮了運算子的優先順序,沒有括號,只有運算元和運算子。如:
中綴表示式:A+B*(C-D)-E/F
字尾表示式:ABCD-*+EF/-
按照標題來,先進性字尾表示式的求值(使用上式中的表示式)。
一、字尾表示式的求解
1、遍歷表示式。遇到運算元的時候,我們進行入棧操作。即ABCD進行入棧操作。此時棧如下圖所示:
D |
C |
B |
A |
2、接著遍歷到“-”,DC進行退棧,計算C-D的值,得到結果後,再將C-D的結果壓棧,此時的棧內如圖所示:
C-D |
B |
A |
3、繼續遍歷,到 “*” , C-D退棧,B退棧,計算(C-D)*B ,得到結果,在壓入棧,此時棧如圖所示:
(C-D)*B |
A |
4、繼續遍歷,到 “+ ” ,(C-D)*B 退棧,A退棧,計算A+(C-D)*B的值,再將結果進行壓棧進去,此時棧內元素:
A+(C-D)*B |
5、繼續遍歷,遇到運算元 EF,進行入棧,此時棧內元素如下:
F |
E |
A+(C-D)*B |
6、繼續遍歷 , 到 “/” ,E,F退棧,計算E/F,再將E/F結果進行入棧,棧內元素如下所示:
E\F |
A+(C-D)*B |
7、最後, - 也是操作符,出棧,有:A+(C-D)*B - E\F 。
到此為止了,留著自己以後慢慢看。忘了就可以來看看。
這就是字尾的表示式的求解過程。關於中綴到字尾的轉化,這個演算法還是看我下一篇吧。這一篇有點多,好吧我承認,有點繁瑣(程式的編寫繁瑣),還沒寫好。