上個視頻寫了個簡易計算器,算個簡單的加減乘除還行,但是如果來個混合運算,或者加個括號,這幾行代碼就差的太多了。
處理這種混合運算,不得不提到數(shù)據(jù)結(jié)構(gòu)中的棧。
我們平時寫的這種表達式,叫做中綴表達式,非常符合人的正常思維,但是計算機計算的話不方便。
中綴表達式可以轉(zhuǎn)換成后綴表達式,這種表達式看起來抽象一些,但是不需要括號或者優(yōu)先級,計算機計算的話比較方便。
整個過程有點復(fù)雜,分的情況比較多,就以這個表達式為例。
首先是把中綴表達式轉(zhuǎn)換成后綴表達式,需要用到一個棧,來存放運算符。
開始遍歷字符串。
遇到數(shù)字,直接寫下來。后面是加號,如果此時棧是空棧,符號直接進棧;再往后,左括號,左括號直接進棧;數(shù)字 1 直接寫下來;再往后是加號,如果棧頂是左括號,加號直接進棧;1 寫下來;后面是右括號,右括號不用進棧,此時讓加號出棧;左右括號遇到一起,可以讓左括號出棧,兩個括號直接丟掉就行;后面遇到乘號,因為乘號優(yōu)先級比加號高,乘號直接進棧;2 寫下來;遇到減號,因為減號的優(yōu)先級不高于乘號,所以乘號出棧;減號的優(yōu)先級同樣不高于加號,加號出棧;此時棧變成空棧,減號入棧;最后把 1 寫下來;表達式遍歷結(jié)束,減號出棧。
這個表達式就是后綴表達式。
計算后綴表達式也需要一個棧,方法就是,遇到數(shù)字進棧,遇到運算符就出來兩個數(shù)字,運算后把結(jié)果進棧。
前面的 2 1 1 分別進棧;遇到加號,1 和 1 出棧,計算得到 2 再進棧;2 進棧;遇到乘號,2 和 2 出棧計算得到 4,4進棧;遇到加號,4 和 2 出棧,計算得到 6,6 進棧;數(shù)字 1 進棧;最后是減號,1 出棧,6 出棧,用后出棧的減去先出棧的,結(jié)果是 5,5進棧。
最后留在棧里面的就是結(jié)果。
這個過程很復(fù)雜,寫代碼之前需要對各種情況分類。
這里直接貼出代碼,如果有需要,評論區(qū)留言代碼,我私信發(fā)你。
代碼寫出來后簡單的測試了幾個,沒什么問題,如果大家在使用中有什么問題,歡迎來交流。
-
數(shù)字
+關(guān)注
關(guān)注
1文章
1701瀏覽量
52611 -
運算
+關(guān)注
關(guān)注
0文章
132瀏覽量
26806
原文標題:用棧實現(xiàn)四則運算
文章出處:【微信號:學益得智能硬件,微信公眾號:學益得智能硬件】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
十進制計算機算術(shù)運算器“加法器”專利申請解析
RDMA設(shè)計12:融合以太網(wǎng)協(xié)議棧設(shè)計1
回調(diào)函數(shù)例子的應(yīng)用
運算放大器的核心組成與典型結(jié)構(gòu)
利用棧結(jié)構(gòu)實現(xiàn)四則運算的巧妙方法
評論