淺談前、中、后綴表達式
前、中、后綴表達式是信息學奧林匹克競賽中比較雞肋的知識點。但是知識點在考綱范圍內,而且中綴表達式轉后綴表達式是比較有用的知識。所以在這里為大家簡單介紹一下。
之前在自學前、中、后綴表達式的時候,發現網上的很多博客和講解的思路都不是很明了,或者就是對新手不是很友好,感謝@JZYShurak的講解,讓我對這個東西建立了一個直觀的認識。所以我來補一篇比較基礎,比較好理解,語言比較簡潔的博客。希望能對各路大佬有所些許的幫助。
中綴表達式
中綴表達式就是我們生活中常用的表達式,簡單來講,就是人能算的表達式。但是,計算機算不了。。(這里說的計算機算不了不是說這個東西不能用計算機算,而是計算機算人能算的表達式的時候不是像我們那樣思考)。
例子:
\(6\times 12+9-14\)。
(PS一些無關緊要的廢話:上面的幾個數字對博主有着一些特殊意義(斜眼笑))
后綴表達式
為什么不用”前——中——后“這個順序介紹呢?因為中綴表達式是最容易理解的”小學三年級以上的水平就能懂“。而后綴表達式的理解和運算過程則涉及到了一種數據結構:棧。
如果對棧還不熟悉或者不明白,就請自行補習了,這應該是計算機科學中最基礎的數據結構了。
還拿上面的例子:
\(6\times 12+9-14\)。
后綴表達式的實現過程是這樣的:
首先,建一個存運算符號的棧,一個存數字的棧。
然后,碰到一個符號,就壓到符號棧中,碰到數字就壓到數字棧中,如果數字棧中有兩個數,就從符號棧中彈出一個符號來對這兩個數進行運算,把結果壓回數字棧中,以此類推。
比如,上面的式子就可以寫成如下的后綴表達式:
\(\times 6 + 12 \quad 9 - 14\)。
顯然,針對一個確定的中綴表達式,其所對應的后綴表達式不唯一。
前綴表達式
前綴表達式的實現原理和后綴表達式大同小異,而唯一需要注意的是,前綴表達式是從后往前轉的!!
也就是說,上面的例子\(6\times 12+9-14\)可以被轉成如下的前綴表達式:
\(14-9 \quad 12+6\times\)。
