1. 程式人生 > >資料結構中字尾表示式的求解,以及中綴與字尾的轉化過程

資料結構中字尾表示式的求解,以及中綴與字尾的轉化過程

表示式的求解是程式中的一個最基本的問題(王道說的)。他實際是一個棧的典型應用。其中,中綴表示式不僅僅注意的事運算的優先順序,還有括號。而後綴表示式的運算子在運算元的後面,在後綴表示式中已考慮了運算子的優先順序,沒有括號,只有運算元和運算子。如:

中綴表示式: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 。

到此為止了,留著自己以後慢慢看。忘了就可以來看看。

這就是字尾的表示式的求解過程。關於中綴到字尾的轉化,這個演算法還是看我下一篇吧。這一篇有點多,好吧我承認,有點繁瑣(程式的編寫繁瑣),還沒寫好。