棧的應(yīng)用----四則運算,后綴逆波蘭表示法(RPN)-創(chuàng)新互聯(lián)

我們從小就學(xué)習(xí)四則運算——加減乘除四則。我們也知道,要先乘除后加減,遇到括號要先算括號內(nèi)的??墒?,想讓計算機進(jìn)行這樣的四則運算可不容易,它可不知道什么乘除優(yōu)先,然后加減。那么,該如何讓計算機也能進(jìn)行這樣的四則運算呢?就是通過棧。

創(chuàng)新互聯(lián)是一家專注于網(wǎng)站設(shè)計、成都網(wǎng)站制作與策劃設(shè)計,天等網(wǎng)站建設(shè)哪家好?創(chuàng)新互聯(lián)做網(wǎng)站,專注于網(wǎng)站建設(shè)十余年,網(wǎng)設(shè)計領(lǐng)域的專業(yè)建站公司;建站業(yè)務(wù)涵蓋:天等等地區(qū)。天等做網(wǎng)站價格咨詢:028-86922220

  我們?nèi)祟惙浅J煜ひ卜浅O矚g用中綴表示法進(jìn)行算數(shù)運算,什么是中綴表示法呢?也就是,一個運算符在兩個數(shù)字中間。比如,5+3,3*5,5/2等等,這些都是中綴表示法。這種表示法很適合人類使用,但是卻不適用于計算機,于是,我們就想出了一種適合計算機的表示方式,叫做,后綴表示法,也就是運算符出現(xiàn)在待運算數(shù)字的后面。比如,5+3,這種叫做中綴表示法,用后綴表示法就是,5 3 +,這樣的方式就是后綴表示法。也就是說,想讓計算機進(jìn)行運算,首先就要把中綴表達(dá)式轉(zhuǎn)換成后綴表達(dá)式。接著才是對后綴表達(dá)式進(jìn)行運算。

  那么先來講,中綴表達(dá)式轉(zhuǎn)換成后綴表達(dá)式是如何通過棧實現(xiàn)的。我們假設(shè)有這么一個中綴表達(dá)式:

5 + 4 * 6 / ( 3 + 7 ) * 2 + 1

我們遵循這樣的一個原則,遇到數(shù)字就直接將數(shù)字輸出,遇到運算符就將運算符壓入棧中。如果當(dāng)前運算符跟棧頂運算符相比,優(yōu)先級高于棧頂運算符,就將此運算符壓入棧中,該運算符成為新的棧頂運算符。換言之,如果該運算符不高于棧頂運算符,則棧頂元素依次出棧,并將當(dāng)前符號進(jìn)棧。好了,開始轉(zhuǎn)換。首先是5,所以,我們要將5輸出,因為5是數(shù)字,遇到數(shù)字就直接輸出,那么輸出為:

5

接著是一個“+”,因為是運算符,所以將運算符入棧。

+

接著,仍然是數(shù)字,所以將4輸出,

5 4

由于接下來的是一個乘號,所以,要將它與棧頂?shù)倪\算符進(jìn)行對比,發(fā)現(xiàn)*號優(yōu)先級高于+號優(yōu)先級,所以,將*號入棧,這樣以來,棧頂元素就為*號。

+ *

由于6也是數(shù)字,所以,可以將其輸出

5 4 6

接下來,是個關(guān)鍵。因為,接下來的一個符號是/號,所以,當(dāng)它和*號對比時,發(fā)現(xiàn)/號優(yōu)先級并不高于*號優(yōu)先級,所以,將棧頂元素依次出棧,也就是

*

所以,目前,輸出元素為

5 4 6 *

然后,將/號入棧,此時棧中只有一個符號/

+ /

接著,是一個左括號( ,所以要將(入棧,直到碰到)是將括號內(nèi)的內(nèi)容出棧。

+ / (

因為是數(shù)字,所以將3出棧

5 4 6 * 3

接著將+號入棧

+ / ( +

接著是一個數(shù)字7,很明顯,將數(shù)字7出棧

5 4 6 * 3 7

這時碰到了),所以要將+出棧,

5 4 6 * 3 7 +

此時,棧中元素為,

+ /

接著是一個*號,將它與/號對比,發(fā)現(xiàn),它不高于*號,所以,將/出棧,然后跟+號對比,發(fā)現(xiàn)高于+號,所以,*可以入棧了,所以,輸出元素如下:

5 4 6 * 3 7 + /

棧中數(shù)據(jù)如下:

+ *

接著是一個數(shù)字2,將2直接輸出

5 4 6 * 3 7 + / 2

接著是一個+號,優(yōu)先級并不高于*號,也不高于棧底的+號,所以,將棧頂元素依次出棧,

5 4 6 * 3 7 + / 2 * +

然后將該+號入棧,所以,此時棧內(nèi)元素為

+

當(dāng)碰到最后一個1的時候,直接將1輸出。

5 4 6 * 3 7 + / 2 * + 1

最后了,已經(jīng)沒有元素了,此時,就將棧中的+號輸出,所以,最后,后綴表達(dá)式為:

5 4 6 * 3 7 + / 2 * + 1 +

  此時,已經(jīng)將我們?nèi)祟愓J(rèn)識的中綴表達(dá)式轉(zhuǎn)換成了機器認(rèn)識的后綴表達(dá)式。那么,此時,就可以開始運算了,運算還是需要借助棧。當(dāng)碰到數(shù)字時,還是需要將數(shù)字壓入棧,當(dāng)碰到運算符時,從棧頂將元素取出,并進(jìn)行運算。比如,5 4 6都是數(shù)字,于是,將5 4 6入棧,

5 4 6

接下來碰到了*號,所以,將6取出作為乘數(shù),將4取出作為被乘數(shù),進(jìn)行相乘運算,4 * 6 = 24,此時,將運算結(jié)果24存入棧中。所以,棧中元素為:

5 24

因為3 7都是數(shù)字,所以,將3 7保存至棧中。

5 24 3 7

因為接下來碰到了一個+號,所以,將7和3取出,進(jìn)行3 + 7 = 10的運算,然后將運算結(jié)果10放入棧中。

5 24 10

接下來是一個/號,所以,將10取出作為除數(shù),將24取出作為被除數(shù),所以,24 / 10 = 2.4,然后將2.4存入棧中,所以,

5 2.4

接下來,是一個數(shù)字2,所以,將2壓入棧中

5 2.4 2

然后是一個乘號,所以將2和2.4取出,執(zhí)行2.4 * 2 = 4.8,將4.8壓入棧中

5 4.8

因為接下來是一個+號,所以將5和4.8取出,執(zhí)行5 + 4.8 = 9.8,此時將9.8入棧

9.8

然后將數(shù)字1入棧

9.8 1

最后一個+號,所以將兩個數(shù)出棧,執(zhí)行9.8 + 1 = 10.8,最后運算結(jié)果為,10.8。到此就完全結(jié)束了。

其實,我舉的這個例子是有問題的,棧中保存的是類型相同的元素,所以我這個例子舉的不好,不過不影響總結(jié)計算機執(zhí)行四則運算的過程。

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機、免備案服務(wù)器”等云主機租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。

標(biāo)題名稱:棧的應(yīng)用----四則運算,后綴逆波蘭表示法(RPN)-創(chuàng)新互聯(lián)
分享鏈接:http://muchs.cn/article34/dhgjpe.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供外貿(mào)網(wǎng)站建設(shè)、品牌網(wǎng)站設(shè)計、企業(yè)建站、云服務(wù)器移動網(wǎng)站建設(shè)、網(wǎng)站導(dǎo)航

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都seo排名網(wǎng)站優(yōu)化