逆波蘭表示式

2021-07-01 21:03:15 字數 2142 閱讀 2704

逆波蘭表示式又叫做字尾表示式,它將複雜表示式轉換為可以依靠簡單的操作得到計算結果的表示式,解決了四則運算中括號改變運算子優先順序的問題。

四則運算的表示式一般都是中綴表示式如 1+2*(3-4)+5,即操作符在兩個運算元之間。

四則運算需要兩個步驟,一是把中綴表示式轉為字尾表示式,二是由字尾表達生成結果中綴表示式轉為字尾表示式演算法描述:

(1) 所用資料結構

首先有個包含中綴表示式元素列表sourcelist;

然後建立乙個符號列表destlist儲存最終字尾表示式;

建立乙個操作符堆疊opstack(作為由sourcelist轉為destlist的中介)

(2) 從sourcelist取出乙個元素a,

如果是數字則加入到destlist中;

如果是運算子,將操作符a與操作符堆疊opstack棧頂的運算子的優先關係相比較;

如果,優先關係高於opstack棧頂的運算子,則將該運算子壓入操作符堆opstack;

倘若不是(低於或等於)的話,則將運算子棧opstack棧頂的運算子從棧中彈

出儲存到destlist,重複此步驟,直到操作符a壓入操作符堆疊opstack。(對於 +、-來說,把opstack全部彈出,然後把a壓入opstack中)

如果是左括號"(",則壓入操作符堆疊opstack;(注意,"(" 將之後的運算子的優先順序與之前opstack中運算子的優先順序隔開)

如果是右括號")",則操作符堆疊opstack彈出操作符並加入到destlist中,直到彈出左括號"(";

(3) 重複步驟2中的操作,所有元素處理完畢後將操作符堆疊opstack彈出操作符並加入到destlist中;

這樣中綴式表示的簡單算術表示式轉化為逆波蘭表示式所表示的簡單算術表式。

示例:

中綴表示式如 1+2*(3-4)+5,構造元素列表1,+,2,*,(,3,-,4,),5,構造乙個空最終字尾表示式destlist,乙個操作符堆疊opstack

1、取出「1」,destlist [ 1 ],opstack [ ] 

2、取出「+」,destlist [1 ],opstack [ + ] 

3、取出「2」,destlist [ 1,2 ],opstack [ + ] 

4、取出「*」,destlist [ 1,2 ],opstack [ +,* ] 

5、取出「(」,destlist [ 1,2 ],opstack [ +,*,( ] 

6、取出「3」,destlist [ 1,2,3 ],opstack [ +,*,( ] 

7、取出「-」,destlist [ 1,2,3 ],opstack [ +,*,(,- ] 

8、取出「4」,destlist [ 1,2,3,4 ],opstack [ +,*,(,- ] 

9、取出「)」,destlist [ 1,2,3,4,- ],opstack[ +,* ]                       //操作符堆疊opstack彈出操作符並加入到destlist中,直到彈出左括號"("

10、取出「+」,destlist [ 1,2,3,4,-,*,+ ],opstack [ + ]               //加號優先順序不大於[+,*] 

11、取出「5」,destlist [ 1,2,3,4,-,*,+,5 ],opstack [ + ] 

12、處理完畢,destlist [ 1,2,3,4,-,*,+,5,+ ],opstack [ ]

遍歷儲存字尾表示式的列表,將元素依次進棧,當遇到操作符時,連續出棧兩個元素,進行運算,再將結果進棧,最後棧內留下的元素就是計算結果

示例:

字尾表示式destlist [ 1,2,3,4,-,*,+,5,+ ],結果堆疊resultstatck [ ]

格式 輸入-->:結果

[1,2,3,4]-->:resultstatck [ 1,2,3,4 ]

[-]-->:resultstatck [ 1,2,3-4 ]

[ * ]-->:resultstatck [ 1,2*(3-4) ]

[+]-->:resultstatck [ 1+2*(3-4) ]

[5]-->:resultstatck [ 1+2*(3-4),5 ]

[+]-->:resultstatck [ 1+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...