'這誰頂得住啊,數學運算原來是這樣實現的'

數學 Java Java虛擬機 程序員 Word 電腦 讀書 王知無大數據 2019-07-19
"

這誰頂得住啊,數學運算原來是這樣實現的

1+1等於多少?我們可以脫口而出2!那麼複雜一點的運算呢?比如(1 +(2 + 3)* 4 + ( 5 - 6 ) / 1)是多少?這時候我們可能就要稍微思考一下,腦中浮現出小學時候數學老師教給我們的運算法則和規律,先計算括號中的,然後計算乘法除法。emememem...一頓操作之後我們得出答案20。思考一下我們計算這個數學答案需要有這麼多步驟,那麼計算機是怎麼計算的呢?它總不可能跟我們人一樣來一發孩提時期的思考吧?

懷著這麼疑問,我們來進行探索。

接下來的一下代碼是java相關的,其他語言方向朋友如果身體不慎可以跳過java代碼部分閱讀結論部分。

作為一個java程序員,既然我們要研究這個問題,那麼我們是不是要立馬打開編輯器來一頓hello word操作。寫下如圖的方法:

"

這誰頂得住啊,數學運算原來是這樣實現的

1+1等於多少?我們可以脫口而出2!那麼複雜一點的運算呢?比如(1 +(2 + 3)* 4 + ( 5 - 6 ) / 1)是多少?這時候我們可能就要稍微思考一下,腦中浮現出小學時候數學老師教給我們的運算法則和規律,先計算括號中的,然後計算乘法除法。emememem...一頓操作之後我們得出答案20。思考一下我們計算這個數學答案需要有這麼多步驟,那麼計算機是怎麼計算的呢?它總不可能跟我們人一樣來一發孩提時期的思考吧?

懷著這麼疑問,我們來進行探索。

接下來的一下代碼是java相關的,其他語言方向朋友如果身體不慎可以跳過java代碼部分閱讀結論部分。

作為一個java程序員,既然我們要研究這個問題,那麼我們是不是要立馬打開編輯器來一頓hello word操作。寫下如圖的方法:

這誰頂得住啊,數學運算原來是這樣實現的

有人會問了,你寫這個方法我能看出個什麼鬼?當然不是了,我們需要了解一下jvm是怎麼處理這段代碼的。接下來進行javac 和 javap 操作,然後我們貼出該方法的字節碼部分。

"

這誰頂得住啊,數學運算原來是這樣實現的

1+1等於多少?我們可以脫口而出2!那麼複雜一點的運算呢?比如(1 +(2 + 3)* 4 + ( 5 - 6 ) / 1)是多少?這時候我們可能就要稍微思考一下,腦中浮現出小學時候數學老師教給我們的運算法則和規律,先計算括號中的,然後計算乘法除法。emememem...一頓操作之後我們得出答案20。思考一下我們計算這個數學答案需要有這麼多步驟,那麼計算機是怎麼計算的呢?它總不可能跟我們人一樣來一發孩提時期的思考吧?

懷著這麼疑問,我們來進行探索。

接下來的一下代碼是java相關的,其他語言方向朋友如果身體不慎可以跳過java代碼部分閱讀結論部分。

作為一個java程序員,既然我們要研究這個問題,那麼我們是不是要立馬打開編輯器來一頓hello word操作。寫下如圖的方法:

這誰頂得住啊,數學運算原來是這樣實現的

有人會問了,你寫這個方法我能看出個什麼鬼?當然不是了,我們需要了解一下jvm是怎麼處理這段代碼的。接下來進行javac 和 javap 操作,然後我們貼出該方法的字節碼部分。

這誰頂得住啊,數學運算原來是這樣實現的

這行圖我們來關注Code部分內容,突然發現代碼中的1、2、3、4、5相關數字都沒有了,直接出現了答案20。原來在javac時候,會對我們的代碼進行優化,在編譯時期就計算出答案直接將答案輸出在class文件中從而減少jvm的計算量。這裡由於水平原因我們就不看javac的代碼實現了(看了也看不懂,還得理解半天),那麼換一種思路,如下圖:

"

這誰頂得住啊,數學運算原來是這樣實現的

1+1等於多少?我們可以脫口而出2!那麼複雜一點的運算呢?比如(1 +(2 + 3)* 4 + ( 5 - 6 ) / 1)是多少?這時候我們可能就要稍微思考一下,腦中浮現出小學時候數學老師教給我們的運算法則和規律,先計算括號中的,然後計算乘法除法。emememem...一頓操作之後我們得出答案20。思考一下我們計算這個數學答案需要有這麼多步驟,那麼計算機是怎麼計算的呢?它總不可能跟我們人一樣來一發孩提時期的思考吧?

懷著這麼疑問,我們來進行探索。

接下來的一下代碼是java相關的,其他語言方向朋友如果身體不慎可以跳過java代碼部分閱讀結論部分。

作為一個java程序員,既然我們要研究這個問題,那麼我們是不是要立馬打開編輯器來一頓hello word操作。寫下如圖的方法:

這誰頂得住啊,數學運算原來是這樣實現的

有人會問了,你寫這個方法我能看出個什麼鬼?當然不是了,我們需要了解一下jvm是怎麼處理這段代碼的。接下來進行javac 和 javap 操作,然後我們貼出該方法的字節碼部分。

這誰頂得住啊,數學運算原來是這樣實現的

這行圖我們來關注Code部分內容,突然發現代碼中的1、2、3、4、5相關數字都沒有了,直接出現了答案20。原來在javac時候,會對我們的代碼進行優化,在編譯時期就計算出答案直接將答案輸出在class文件中從而減少jvm的計算量。這裡由於水平原因我們就不看javac的代碼實現了(看了也看不懂,還得理解半天),那麼換一種思路,如下圖:

這誰頂得住啊,數學運算原來是這樣實現的

改良後的代碼如下,用變量來聲明數字,然後進行javac javap 看看會有什麼產物,如下圖:

"

這誰頂得住啊,數學運算原來是這樣實現的

1+1等於多少?我們可以脫口而出2!那麼複雜一點的運算呢?比如(1 +(2 + 3)* 4 + ( 5 - 6 ) / 1)是多少?這時候我們可能就要稍微思考一下,腦中浮現出小學時候數學老師教給我們的運算法則和規律,先計算括號中的,然後計算乘法除法。emememem...一頓操作之後我們得出答案20。思考一下我們計算這個數學答案需要有這麼多步驟,那麼計算機是怎麼計算的呢?它總不可能跟我們人一樣來一發孩提時期的思考吧?

懷著這麼疑問,我們來進行探索。

接下來的一下代碼是java相關的,其他語言方向朋友如果身體不慎可以跳過java代碼部分閱讀結論部分。

作為一個java程序員,既然我們要研究這個問題,那麼我們是不是要立馬打開編輯器來一頓hello word操作。寫下如圖的方法:

這誰頂得住啊,數學運算原來是這樣實現的

有人會問了,你寫這個方法我能看出個什麼鬼?當然不是了,我們需要了解一下jvm是怎麼處理這段代碼的。接下來進行javac 和 javap 操作,然後我們貼出該方法的字節碼部分。

這誰頂得住啊,數學運算原來是這樣實現的

這行圖我們來關注Code部分內容,突然發現代碼中的1、2、3、4、5相關數字都沒有了,直接出現了答案20。原來在javac時候,會對我們的代碼進行優化,在編譯時期就計算出答案直接將答案輸出在class文件中從而減少jvm的計算量。這裡由於水平原因我們就不看javac的代碼實現了(看了也看不懂,還得理解半天),那麼換一種思路,如下圖:

這誰頂得住啊,數學運算原來是這樣實現的

改良後的代碼如下,用變量來聲明數字,然後進行javac javap 看看會有什麼產物,如下圖:

這誰頂得住啊,數學運算原來是這樣實現的

"

這誰頂得住啊,數學運算原來是這樣實現的

1+1等於多少?我們可以脫口而出2!那麼複雜一點的運算呢?比如(1 +(2 + 3)* 4 + ( 5 - 6 ) / 1)是多少?這時候我們可能就要稍微思考一下,腦中浮現出小學時候數學老師教給我們的運算法則和規律,先計算括號中的,然後計算乘法除法。emememem...一頓操作之後我們得出答案20。思考一下我們計算這個數學答案需要有這麼多步驟,那麼計算機是怎麼計算的呢?它總不可能跟我們人一樣來一發孩提時期的思考吧?

懷著這麼疑問,我們來進行探索。

接下來的一下代碼是java相關的,其他語言方向朋友如果身體不慎可以跳過java代碼部分閱讀結論部分。

作為一個java程序員,既然我們要研究這個問題,那麼我們是不是要立馬打開編輯器來一頓hello word操作。寫下如圖的方法:

這誰頂得住啊,數學運算原來是這樣實現的

有人會問了,你寫這個方法我能看出個什麼鬼?當然不是了,我們需要了解一下jvm是怎麼處理這段代碼的。接下來進行javac 和 javap 操作,然後我們貼出該方法的字節碼部分。

這誰頂得住啊,數學運算原來是這樣實現的

這行圖我們來關注Code部分內容,突然發現代碼中的1、2、3、4、5相關數字都沒有了,直接出現了答案20。原來在javac時候,會對我們的代碼進行優化,在編譯時期就計算出答案直接將答案輸出在class文件中從而減少jvm的計算量。這裡由於水平原因我們就不看javac的代碼實現了(看了也看不懂,還得理解半天),那麼換一種思路,如下圖:

這誰頂得住啊,數學運算原來是這樣實現的

改良後的代碼如下,用變量來聲明數字,然後進行javac javap 看看會有什麼產物,如下圖:

這誰頂得住啊,數學運算原來是這樣實現的

這誰頂得住啊,數學運算原來是這樣實現的

這裡由於代碼太長,所以分開來截圖,接入下來進行相關的字節碼分析。

還是隻看Code部分內容:先看上半張圖,第0行字節碼iconst_1的大致意思就是將int 1 壓入操作數棧,第1行字節碼istore_1的大致意思是將操作數棧棧頂的元素1放入局部變量表的位置1中。其實對應的代碼就是int a = 1。之後的幾行代碼也是類似的意思,同時在下半張圖的局部變量表LineNubmerTable可以看出。

上半張圖分析完畢,重頭戲來了。下半部分的字節碼就是運算部分,相關字節碼錶達的意思這裡就不解釋了,各位朋友可以百度一下。我這裡寫出字節碼翻譯之後的內容,也就是:1 2 3 + 4 * + 5 6 - 1 / +。waht???這輸出的是啥玩意,靠這些東西怎麼去得出最後的答案?

這些輸出的符號叫做後綴表達式,同時也叫做逆波蘭表示。

後綴表達式的規則:

從左到右遍歷表達式的每個數字和符號,遇到數字就進棧,遇到是符號就將處於棧頂兩個數字出棧,進行運算,運算結果進棧,一直到最終結果。

得到規則後下面來使用這些規則來進行相關計算:

  1. 首先初始化一個空棧,用來進行相關運算。
  2. 前三個數字是 1 2 3,我們將這三個哥們都進行入棧操作。這時候棧內元素有 1 2 3。
  3. 接下來是 + ,所以將 2 3 出棧,然後 2 + 3 等 5, 將 5 入棧。這時候棧內元素有1 5。
  4. 接下來是 4 ,將 4 入棧。這時候棧內元素有 1 5 4。
  5. 接下來是 * ,按照規則將 4 5 出棧,然後 4 * 5 得 20,將 20 入棧。這時候棧內元素有 1 20。
  6. 接下來是 + ,將 1 20 出棧,1 + 20 等 21, 將 21 入棧。這時候棧內元素有 21 。
  7. 接下來是 5 6 ,將 5 6 入棧。這時候棧內元素有 21 5 6。
  8. 接下來是 - , 將 5 6 出棧,5 - 6 等 -1 ,將 -1 入棧。這時候棧內元素有 21 -1。
  9. 接下來是 1 ,將 1 入棧,這時候棧內元素有 21 -1 1。
  10. 接下來是 / ,-1 1 出棧, -1 / 1 得 -1,將 -1 入棧。這時候棧內元素有 21 -1。
  11. 接下來是 + ,將 21 -1 出棧, 21 - 1 等 20,將 20 入棧。這時候站內元素有 20。
  12. 然後將 20 出棧。得到運算結果20。

經過一連串的接下來終於得到計算結果,對於前人的智慧結晶,我們應當永遠都懷著敬畏和學習的心態。

現在瞭解了後綴表達式,那麼現在還需要了解一下後綴表達式是怎麼轉化的來的。下面來了解一下中綴表達式。

中綴表達式:

我們把文章起始部分的數學運算表達式( 1 +(2 + 3)* 4 + ( 5 - 6 ) / 1 )叫做中綴表達式,因為所有的運算符號都處於兩個數字的中間。

中綴表達式規則如下:

從左到用遍歷中綴表達式的每個數字和符號,若是數字就輸出,成為後綴表達式的一部分;若是符號,則判斷其與棧頂符號的優先級,是右括號或優先級不低於不高於棧頂符號(乘除優先於加減)則棧頂元素一次出棧並輸出,並將當前符號進站,一直到最終輸出後綴表達式為止。

現在來使用中綴表達式的規則將篇頭部分的運算表達式轉換成後綴表達式:

  1. 首先初始化一個空棧,用來進行相關運算。同時記錄輸出的後綴表達式部分。
  2. 第一個是數字 1 ,輸出到後綴表達式部分。這時候棧內元素為空,輸出表達是部分為 1。
  3. 接下來是符號 + ,+ 入棧。這時候棧內元素為 + ,輸出表達是部分為 1。
  4. 接下來是符號( ,( 入棧。這時候棧內元素為 + ( ,輸出表達是部分為 1。
  5. 接下來是數字 2 ,輸出到後綴表達式部分。這時候棧內元素為 + ( ,輸出表達是部分為 1 2。
  6. 接下來是符號 + ,+ 入棧。這時候棧內元素為 + ( + ,輸出表達是部分為 1 2。
  7. 接下來是數字 3 ,輸出到後綴表達式部分。這時候棧內元素為 + ( + ,輸出表達是部分為 1 2 3。
  8. 接下來是符號 ) ,發現是),所以將棧內元素出棧,直到與之匹配的( 出棧為止。這時候棧內元素為 + ,輸出表達是部分為 1 2 3 +。
  9. 接下來是符號 * ,* 入棧。這時候棧內元素為 + * ,輸出表達是部分為 1 2 3 +。
  10. 接下來是數字 4 ,輸出到後綴表達式部分。這時候棧內元素為 + * ,輸出表達是部分為 1 2 3 + 4。
  11. 接下來是符號 + ,+ 優先級低於棧頂元素 * ,所以講棧內元素依次出棧,然後 + 入棧。這時候棧內元素為 + ,輸出表達是部分為 1 2 3 + 4 * +。
  12. 接下來是符號( ,( 入棧。這時候棧內元素為 + ( ,輸出表達是部分為 1 2 3 + 4 * +。
  13. 接下來是數字 5 ,輸出到後綴表達式部分。這時候棧內元素為 + ( ,輸出表達是部分為 1 2 3 + 4 * + 5。
  14. 接下來是符號 - ,- 入棧。這時候棧內元素為 + ( - ,輸出表達是部分為 1 2 3 + 4 * + 5。
  15. 接下來是數字 6 ,輸出到後綴表達式部分。這時候棧內元素為 + ( - ,輸出表達是部分為 1 2 3 + 4 * + 5 6。
  16. 接下來是符號 ) ,發現是),所以將棧內元素出棧,直到與之匹配的( 出棧為止。這時候棧內元素為 + ,輸出表達是部分為 1 2 3 + 4 * + 5 6 -。
  17. 接下來是符號 / ,/ 入棧。這時候棧內元素為 + / ,輸出表達是部分為 1 2 3 + 4 * + 5 6 -。
  18. 接下來是數字 1 ,輸出到後綴表達式部分。這時候棧內元素為 + / ,輸出表達是部分為 1 2 3 + 4 * + 5 6 - 1。
  19. 此時運算表達式遍歷完畢,講棧內元素依次出棧。這時候棧內元素為空,輸出表達是部分為 1 2 3 + 4 * + 5 6 - 1 / +。

又是一頓猛如虎的接下來操作,終於將中綴表達式轉化成了後綴表達式。深吸一口氣緩解一下。

我們發現在這兩個表達式的規則中,棧都是一個很重要的元素,這是棧的應用之一。

總結

棧的應用還有很多,希望在未來的工作中我們能進行更多的挖掘。如果對於棧的知識還不清楚,可以查看今天第一篇文章。同時希望可以小手動一下給個關注,希望今後能夠一起學習。

"

這誰頂得住啊,數學運算原來是這樣實現的

1+1等於多少?我們可以脫口而出2!那麼複雜一點的運算呢?比如(1 +(2 + 3)* 4 + ( 5 - 6 ) / 1)是多少?這時候我們可能就要稍微思考一下,腦中浮現出小學時候數學老師教給我們的運算法則和規律,先計算括號中的,然後計算乘法除法。emememem...一頓操作之後我們得出答案20。思考一下我們計算這個數學答案需要有這麼多步驟,那麼計算機是怎麼計算的呢?它總不可能跟我們人一樣來一發孩提時期的思考吧?

懷著這麼疑問,我們來進行探索。

接下來的一下代碼是java相關的,其他語言方向朋友如果身體不慎可以跳過java代碼部分閱讀結論部分。

作為一個java程序員,既然我們要研究這個問題,那麼我們是不是要立馬打開編輯器來一頓hello word操作。寫下如圖的方法:

這誰頂得住啊,數學運算原來是這樣實現的

有人會問了,你寫這個方法我能看出個什麼鬼?當然不是了,我們需要了解一下jvm是怎麼處理這段代碼的。接下來進行javac 和 javap 操作,然後我們貼出該方法的字節碼部分。

這誰頂得住啊,數學運算原來是這樣實現的

這行圖我們來關注Code部分內容,突然發現代碼中的1、2、3、4、5相關數字都沒有了,直接出現了答案20。原來在javac時候,會對我們的代碼進行優化,在編譯時期就計算出答案直接將答案輸出在class文件中從而減少jvm的計算量。這裡由於水平原因我們就不看javac的代碼實現了(看了也看不懂,還得理解半天),那麼換一種思路,如下圖:

這誰頂得住啊,數學運算原來是這樣實現的

改良後的代碼如下,用變量來聲明數字,然後進行javac javap 看看會有什麼產物,如下圖:

這誰頂得住啊,數學運算原來是這樣實現的

這誰頂得住啊,數學運算原來是這樣實現的

這裡由於代碼太長,所以分開來截圖,接入下來進行相關的字節碼分析。

還是隻看Code部分內容:先看上半張圖,第0行字節碼iconst_1的大致意思就是將int 1 壓入操作數棧,第1行字節碼istore_1的大致意思是將操作數棧棧頂的元素1放入局部變量表的位置1中。其實對應的代碼就是int a = 1。之後的幾行代碼也是類似的意思,同時在下半張圖的局部變量表LineNubmerTable可以看出。

上半張圖分析完畢,重頭戲來了。下半部分的字節碼就是運算部分,相關字節碼錶達的意思這裡就不解釋了,各位朋友可以百度一下。我這裡寫出字節碼翻譯之後的內容,也就是:1 2 3 + 4 * + 5 6 - 1 / +。waht???這輸出的是啥玩意,靠這些東西怎麼去得出最後的答案?

這些輸出的符號叫做後綴表達式,同時也叫做逆波蘭表示。

後綴表達式的規則:

從左到右遍歷表達式的每個數字和符號,遇到數字就進棧,遇到是符號就將處於棧頂兩個數字出棧,進行運算,運算結果進棧,一直到最終結果。

得到規則後下面來使用這些規則來進行相關計算:

  1. 首先初始化一個空棧,用來進行相關運算。
  2. 前三個數字是 1 2 3,我們將這三個哥們都進行入棧操作。這時候棧內元素有 1 2 3。
  3. 接下來是 + ,所以將 2 3 出棧,然後 2 + 3 等 5, 將 5 入棧。這時候棧內元素有1 5。
  4. 接下來是 4 ,將 4 入棧。這時候棧內元素有 1 5 4。
  5. 接下來是 * ,按照規則將 4 5 出棧,然後 4 * 5 得 20,將 20 入棧。這時候棧內元素有 1 20。
  6. 接下來是 + ,將 1 20 出棧,1 + 20 等 21, 將 21 入棧。這時候棧內元素有 21 。
  7. 接下來是 5 6 ,將 5 6 入棧。這時候棧內元素有 21 5 6。
  8. 接下來是 - , 將 5 6 出棧,5 - 6 等 -1 ,將 -1 入棧。這時候棧內元素有 21 -1。
  9. 接下來是 1 ,將 1 入棧,這時候棧內元素有 21 -1 1。
  10. 接下來是 / ,-1 1 出棧, -1 / 1 得 -1,將 -1 入棧。這時候棧內元素有 21 -1。
  11. 接下來是 + ,將 21 -1 出棧, 21 - 1 等 20,將 20 入棧。這時候站內元素有 20。
  12. 然後將 20 出棧。得到運算結果20。

經過一連串的接下來終於得到計算結果,對於前人的智慧結晶,我們應當永遠都懷著敬畏和學習的心態。

現在瞭解了後綴表達式,那麼現在還需要了解一下後綴表達式是怎麼轉化的來的。下面來了解一下中綴表達式。

中綴表達式:

我們把文章起始部分的數學運算表達式( 1 +(2 + 3)* 4 + ( 5 - 6 ) / 1 )叫做中綴表達式,因為所有的運算符號都處於兩個數字的中間。

中綴表達式規則如下:

從左到用遍歷中綴表達式的每個數字和符號,若是數字就輸出,成為後綴表達式的一部分;若是符號,則判斷其與棧頂符號的優先級,是右括號或優先級不低於不高於棧頂符號(乘除優先於加減)則棧頂元素一次出棧並輸出,並將當前符號進站,一直到最終輸出後綴表達式為止。

現在來使用中綴表達式的規則將篇頭部分的運算表達式轉換成後綴表達式:

  1. 首先初始化一個空棧,用來進行相關運算。同時記錄輸出的後綴表達式部分。
  2. 第一個是數字 1 ,輸出到後綴表達式部分。這時候棧內元素為空,輸出表達是部分為 1。
  3. 接下來是符號 + ,+ 入棧。這時候棧內元素為 + ,輸出表達是部分為 1。
  4. 接下來是符號( ,( 入棧。這時候棧內元素為 + ( ,輸出表達是部分為 1。
  5. 接下來是數字 2 ,輸出到後綴表達式部分。這時候棧內元素為 + ( ,輸出表達是部分為 1 2。
  6. 接下來是符號 + ,+ 入棧。這時候棧內元素為 + ( + ,輸出表達是部分為 1 2。
  7. 接下來是數字 3 ,輸出到後綴表達式部分。這時候棧內元素為 + ( + ,輸出表達是部分為 1 2 3。
  8. 接下來是符號 ) ,發現是),所以將棧內元素出棧,直到與之匹配的( 出棧為止。這時候棧內元素為 + ,輸出表達是部分為 1 2 3 +。
  9. 接下來是符號 * ,* 入棧。這時候棧內元素為 + * ,輸出表達是部分為 1 2 3 +。
  10. 接下來是數字 4 ,輸出到後綴表達式部分。這時候棧內元素為 + * ,輸出表達是部分為 1 2 3 + 4。
  11. 接下來是符號 + ,+ 優先級低於棧頂元素 * ,所以講棧內元素依次出棧,然後 + 入棧。這時候棧內元素為 + ,輸出表達是部分為 1 2 3 + 4 * +。
  12. 接下來是符號( ,( 入棧。這時候棧內元素為 + ( ,輸出表達是部分為 1 2 3 + 4 * +。
  13. 接下來是數字 5 ,輸出到後綴表達式部分。這時候棧內元素為 + ( ,輸出表達是部分為 1 2 3 + 4 * + 5。
  14. 接下來是符號 - ,- 入棧。這時候棧內元素為 + ( - ,輸出表達是部分為 1 2 3 + 4 * + 5。
  15. 接下來是數字 6 ,輸出到後綴表達式部分。這時候棧內元素為 + ( - ,輸出表達是部分為 1 2 3 + 4 * + 5 6。
  16. 接下來是符號 ) ,發現是),所以將棧內元素出棧,直到與之匹配的( 出棧為止。這時候棧內元素為 + ,輸出表達是部分為 1 2 3 + 4 * + 5 6 -。
  17. 接下來是符號 / ,/ 入棧。這時候棧內元素為 + / ,輸出表達是部分為 1 2 3 + 4 * + 5 6 -。
  18. 接下來是數字 1 ,輸出到後綴表達式部分。這時候棧內元素為 + / ,輸出表達是部分為 1 2 3 + 4 * + 5 6 - 1。
  19. 此時運算表達式遍歷完畢,講棧內元素依次出棧。這時候棧內元素為空,輸出表達是部分為 1 2 3 + 4 * + 5 6 - 1 / +。

又是一頓猛如虎的接下來操作,終於將中綴表達式轉化成了後綴表達式。深吸一口氣緩解一下。

我們發現在這兩個表達式的規則中,棧都是一個很重要的元素,這是棧的應用之一。

總結

棧的應用還有很多,希望在未來的工作中我們能進行更多的挖掘。如果對於棧的知識還不清楚,可以查看今天第一篇文章。同時希望可以小手動一下給個關注,希望今後能夠一起學習。

這誰頂得住啊,數學運算原來是這樣實現的

"

相關推薦

推薦中...