定義
中綴表示式是乙個通用的算術或邏輯公式表示方法, 操作符是以中綴形式處於運算元的中間(例:3 + 4),中綴表示式是人們常用的算術表示方法。
字尾表示式,又稱逆波蘭式,指的是不包含括號,運算子放在兩個運算物件的後面,所有的計算按運算子出現的順序,嚴格從左向右進行(不再考慮運算子的優先規則)
規則轉換過程需要用到棧,具體過程如下:
1、如果遇到運算元,我們就直接將其輸出。
2、如果遇到操作符,則我們將其放入到棧中,遇到左括號時我們也將其放入棧中。
3、如果遇到乙個右括號,則將棧元素彈出,將彈出的操作符輸出直到遇到左括號為止。注意,左括號只彈出並不輸出。
4、如果遇到任何其他的操作符,如(「+」, 「*」,「(」)等,從棧中彈出元素直到遇到發現更低優先順序的元素(或者棧為空)為止。彈出完這些元素後,才將遇到的操作符壓入到棧中。有一點需要注意,只有在遇到" ) 「的情況下我們才彈出」 ( 「,其他情況我們都不會彈出」 ( "。
5、如果我們讀斜體樣式到了輸入的末尾,則將棧中所有元素依次彈出。
例項中綴表示式:3*(8+6/2-5)+3
步驟:從左到右遍歷,第乙個是運算元3,直接輸出,3。
第二個是操作符號*,根據規則4,壓棧,如下圖:
第三個符號是左括號,根據規則4,壓棧,如下圖:
第四個是運算元8,直接輸出,3 8
第五個是操作符號+,根據規則4,壓棧,如下圖:
第六個是運算元,根據規則1,直接輸出,3 8 6
第七個是操作符號/,因為 / 優先順序比+號的高,所以直接壓棧,如下圖:
第八個是運算元,根據規則1,直接輸出,3 8 6 2
第九個是操作符號 - , - 的優先順序比 / 的低,根據規則4,將 / 彈出棧,輸出 3 8 6 2 / 如下圖:
繼續用 - 和 +比較,兩個優先順序一樣,需要將 + 彈出棧,然後再將 - 壓棧,輸出 3 8 6 2 / + 如下圖:
第十個是運算元,直接輸出 3 8 6 2 / + 5
第十乙個是右括號,需要將左括號和右括號的操作符號依次彈出並輸出,括號不列印,輸出 3 8 6 2 / + 5 -,如下圖:
第十二個是操作符號+,優先順序比 * 低,需要將 * 彈出棧輸出,將+壓棧,輸出 3 8 6 2 / + 5 - *,如下圖:
第十三個是運算元3,直接輸出, 3 8 6 2 / + 5 - * 3,這是最後乙個,根據規則5,將棧中的所有元素依次輸出,
最後的字尾表示式為: 3 8 6 2 / + 5 - * 3 +
中綴表示式轉為字尾表示式
設以 字元作為結束符的中綴算術表示式已經儲存在s1字串中,轉換後得到的字尾算術表示式擬存於s2字串中。由中綴表示式轉換為字尾表示式的規則可知 轉換前後,表示式中的數值項的次序不變,而運算子的次序發生了變化,由處在兩個運算物件的中間變為處在兩個運算物件的後面,同時去掉了所有的括號。為了使轉換正確,必須...
中綴表示式轉為字尾表示式
把中綴表示式轉換為字尾表示式。基本思路是。每乙個符號最開始都是懸而未決的。是否簡單的把符號放到左右數字的後面,都是由後面的符號決定。所以先插入第乙個符號。後面拿到的符號必須和之前的符號 棧頂 比較,棧頂和新符號平級或者棧頂更優先,那麼棧頂符號插入字尾表示式。public static void ma...
中綴表示式轉為字尾表示式 棧
題目 給乙個中綴表示式 即標準形式的表示式 列印該表示式的字尾表示式。中綴表示式最大的不同就是去掉了表示運算子優先順序的括號。運算元為26個小寫或大寫的英文本母 注意不包括數字和其他字元 操作符為 一共八個。具體見例子見下圖 如下 include include include using name...