波蘭表示式和逆波蘭表示式(棧)

2021-05-22 13:25:42 字數 719 閱讀 3805

中綴表示式如1*2+(2-1), 其運算子一般出現在運算元之間, 因此稱為中綴表示式,也就是大家程式設計中寫的表達

式。編譯系統不考慮表示式的優先級別, 只是對表示式從左到右進行掃瞄, 當遇到運算子時, 就把其前面的兩

個運算元取出, 進行操作。為達到上述目的, 就要將中綴表示式進行改寫,變為字尾表示式 如上面的表示式

1*2+(2-1), 就變為12*21-+;

字尾表示式中不含有括號, 且字尾表示式的運算元和中綴表示式的運算元排列次序完全相同, 只是運算子的

次序發生了改變。我們實現的時候,只需要用乙個特定工作方式的資料結構(棧),就可以實現。

其中stack op;用來存放運算子棧。陣列ans用來存放字尾表示式。

演算法思想:

從左到右掃瞄中綴表示式,是運算元就放進陣列ans的末尾。

如果是運算子的話,分為下面3種情況:

1)如果是『(』直接壓入op棧。

2)如果是『)』,依次從op棧彈出運算子加到陣列ans的末尾,知道遇到'(';

3) 如果是非括號,比較掃瞄到的運算子,和op棧頂的運算子。如果掃瞄到的運算子優先順序高於棧頂運算子

則,把運算子壓入棧。否則的話,就依次把棧中運算子彈出加到陣列ans的末尾,直到遇到優先順序低於掃瞄

到的運算子,並且把掃瞄到的運算子壓入棧中。

就這樣依次掃瞄,知道結束為止。

如果掃瞄結束,棧中還有元素,則依次彈出加到陣列ans的末尾,就得到了字尾表示式。

波蘭表示式和逆波蘭表示式

題目 根據逆波蘭表示法,求表示式的值。有效的運算子包括 每個運算物件可以是整數,也可以是另乙個逆波蘭表示式。說明 示例 1 輸入 2 1 3 輸出 9 解釋 該算式轉化為常見的中綴算術表示式為 2 1 3 9 示例 2 輸入 4 13 5 輸出 6 解釋 該算式轉化為常見的中綴算術表示式為 4 13...

波蘭表示式 逆波蘭表示式

中綴表示式是最常見的運算表示式,如 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 ...