棧的應用-(計算器/表達式的計算/後綴表示)

問題描述:標準輸入讀入一個整數算數表達式,計算結果並輸出
要求:
1.表達式中只有+ ,-,,/,表達式末尾的=,表達式中可能出現空格
2.表達式中可能出現圓括號,括號可以嵌套,不會出現錯誤的表達式
3.出現除號/時,以整數相除進行運算,結果仍是整數。
輸入形式:從鍵盤輸入一個以=結尾的算術運算表達式
輸出形式:在屏幕上輸出計算表達結果,爲整數。
樣例1:24/(1+2+36/6/2-2)
(12/2/2)=
樣例一輸出
18

問題分析:
上文中是中綴表達式,在計算機中我們常常轉化成後綴表達式
a+b
a+bc
a+b
c+(d*e+f)/g

轉化成後綴表達式爲:
ab+
abc*+
abc*+de*f+g/+

中綴到後綴的轉換規則
從左到右遍歷中綴表達式中每一個數字和符號:
如果是數字直接輸出,即成爲後綴表達式的一部分:
若是符號:
若是(,則將棧中元素彈出並輸出,直到遇到(,(彈出但是不輸出
若是(,+,*等符號,則從棧中彈出並輸出優先級高於(或等於)當前的符號,直到遇到一個優先級低的符號;然後將當前符號壓入棧中。
遍歷結束,將棧中的所有元素依次彈出,直到棧爲空。

後綴表達式的計算:
從左到右遍歷後綴表達式中每個數字和符號:
如果是數字直接進棧;
若是運算符±*/,則從棧中彈出兩個數字進行運算,並將計算結果進棧。
遍歷結束,將計算結果從棧中彈出(棧中應該只有一個數字,否則表達式有錯)。

思路:設兩個棧,一個數據棧,用來轉化,一個計算棧。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章