字尾表示式又叫逆波蘭表示式。那麼如何講中綴表示式轉化為字尾表示式呢?
比如已知中綴表示式a+b*c+(d*e+f)*g,如何將其轉化為字尾表示式abc*+de*f+g*+呢?有4個基本原則。
1. 當讀到運算元時,立即輸出(由字尾表示式的形式明顯可以看出,運算元的輸出優先順序要比操作符要高);當讀到操作符時,並不立即輸出,而是將其存於堆疊中。
2. 如果見到右括號,那麼將棧元素彈出,直到遇到左括號。但是左括號只是彈出,並不輸出。
3. 如果見到其他符號,我們將棧中輸出優先順序更高(或者相同)的符號全部彈出。然後將此符號入棧。(即把別人擠出去之後,自己入棧)
4. 強調一下,比如見到符號「+」,如果棧頂有符號「-」。優先順序相同。需要將「-」彈出,「+」入棧。優先順序相同也要彈出!
下面舉個例子,寫出a+b*c+(d*e+f)*g的字尾表示式。
(畫圖表示不方便,我們用下表表示轉換過程)
備註1:
首先讀到a,因為a屬於運算元,直接輸出
備註2:
讀到「*」號。棧頂符號「+」號的優先順序不比「*」號的優先順序高,也不是不相同。故將「*」入棧。
備註3:
讀「+」號,因為棧頂符號「*」比讀到的「+」優先順序高,棧頂符號「+」與獨到的「+」優先順序相同,故「*」和「+」都彈出。將剛讀到的「+」號入棧。
備註4:
讀到「(」,將「)「後的棧頂元素全部輸出。
備註5:
輸入串遍歷完畢,將棧中剩餘元素全部彈出。
波蘭表示式 逆波蘭表示式
中綴表示式是最常見的運算表示式,如 3 5 2 6 1 波蘭表示式又稱為字首表示式,它是由中綴表示式經過一定的方式轉換來的 比如中綴表示式為 3 5x 2 6 1 對應的字首表示式為 3 x 5 2 6 1 對於中綴表示式從右向左遍歷轉換為字首表示式,中途要是用棧進行儲存 轉換規則如下 波蘭表示式 ...
波蘭逆波蘭表示式
實現乙個基本的計算器來計算簡單的表示式字串。表示式字串只包含非負整數,算符 左括號 和右括號 整數除法需要 向下截斷 你可以假定給定的表示式總是有效的。所有的中間結果的範圍為 231,231 1 class solution s2.push s.substr l,r l l r 碰見符號 else ...
波蘭表示式與逆波蘭表示式
2018年09月03日 11 29 15 jitwxs 閱讀數 70 標籤 波蘭 字首 更多 個人分類 演算法與資料結構 常見的算術表示式,稱為中綴表示式,例如 5 6 4 2 3波蘭表示式也稱為字首表示式,以上面的例子為例,其波蘭表示式為 5 6 4 2 3中綴表示式轉換字首表示式的操作過程為 1...