上個視頻寫了個簡易計算器,算個簡單的加減乘除還行,但是如果來個混合運算,或者加個括號,這幾行代碼就差的太多了。
處理這種混合運算,不得不提到數據結構中的棧。
我們平時寫的這種表達式,叫做中綴表達式,非常符合人的正常思維,但是計算機計算的話不方便。
中綴表達式可以轉換成后綴表達式,這種表達式看起來抽象一些,但是不需要括號或者優先級,計算機計算的話比較方便。
整個過程有點復雜,分的情況比較多,就以這個表達式為例。
首先是把中綴表達式轉換成后綴表達式,需要用到一個棧,來存放運算符。
開始遍歷字符串。
遇到數字,直接寫下來。后面是加號,如果此時棧是空棧,符號直接進棧;再往后,左括號,左括號直接進棧;數字 1 直接寫下來;再往后是加號,如果棧頂是左括號,加號直接進棧;1 寫下來;后面是右括號,右括號不用進棧,此時讓加號出棧;左右括號遇到一起,可以讓左括號出棧,兩個括號直接丟掉就行;后面遇到乘號,因為乘號優先級比加號高,乘號直接進棧;2 寫下來;遇到減號,因為減號的優先級不高于乘號,所以乘號出棧;減號的優先級同樣不高于加號,加號出棧;此時棧變成空棧,減號入棧;最后把 1 寫下來;表達式遍歷結束,減號出棧。
這個表達式就是后綴表達式。
計算后綴表達式也需要一個棧,方法就是,遇到數字進棧,遇到運算符就出來兩個數字,運算后把結果進棧。
前面的 2 1 1 分別進棧;遇到加號,1 和 1 出棧,計算得到 2 再進棧;2 進棧;遇到乘號,2 和 2 出棧計算得到 4,4進棧;遇到加號,4 和 2 出棧,計算得到 6,6 進棧;數字 1 進棧;最后是減號,1 出棧,6 出棧,用后出棧的減去先出棧的,結果是 5,5進棧。
最后留在棧里面的就是結果。
這個過程很復雜,寫代碼之前需要對各種情況分類。
這里直接貼出代碼,如果有需要,評論區留言代碼,我私信發你。
代碼寫出來后簡單的測試了幾個,沒什么問題,如果大家在使用中有什么問題,歡迎來交流。
-
數字
+關注
關注
1文章
1694瀏覽量
51402 -
運算
+關注
關注
0文章
132瀏覽量
25861
原文標題:用棧實現四則運算
文章出處:【微信號:學益得智能硬件,微信公眾號:學益得智能硬件】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論