逆波蘭表示式的求解問題

2021-08-10 15:28:00 字數 994 閱讀 1734

因為要考研究生,第一次學習資料結構,演算法中的一些關於棧的基本操作是從嚴蔚敏編著的《資料結構》(c語言版)學來,**有一些不夠完整或者欠缺的地方,希望有大神可以幫忙指出,感激不盡。

下面具體談一談逆波蘭表示式。

逆波蘭表示式也就是字尾式,它的主要特徵是「s1 s2 op」s1是第一運算元,s2是第二運算元,op則是運算子了。

舉個例子:正常的表示式是5*2,也就是」s1 op s2」,這是符合我們學習的數學的,然而計算機對於這樣的式子不是太方便計算,所以逆波蘭表示式應運而生。

所以對於上面的例子逆波蘭表示式就是52*。特點是運算元的順序不變,運算子到最後那麼計算機在執行的時候則是從左到右掃瞄表示式,一旦遇到了運算子,那麼緊挨著它前面的運算元應該是第二運算元(s2),再往前面乙個是第一運算元(s1),然後即可開始運算。運算結果又作為新的運算元。所以這裡我用了乙個棧來儲存運算元,下面就是我的具體的演算法思想了,有一些函式沒有完全寫出來,有些是不太清楚怎麼寫,具體都在**裡了。

關於棧的一些函式比如」pop」』,」push」等為了演算法簡略這裡我就不具體說明了,具體大家可以參考上文提到的書裡的47頁。

還有乙個函式」in(c,op)」判斷c是否在運算子集合的這個函式,我也是一時沒寫出具體的**,不過這也不妨礙闡述整個逆波蘭思想吧,嘿嘿。

這裡我處理的表示式已經是轉換好的字尾表示式,不包含從原表示式轉換成字尾式的**,這塊還不太清楚,歡迎高手指導。

int operate(int s1,char op,int s2)

}int nibolan()

//如果c不在運算子集合(op)中,壓入運算元棧

else//else

}//while

gettop(opnd,result);//迴圈結束最後運算元棧中的結果就是整個表示式的值

return(result);

}

波蘭表示式 逆波蘭表示式

中綴表示式是最常見的運算表示式,如 3 5 2 6 1 波蘭表示式又稱為字首表示式,它是由中綴表示式經過一定的方式轉換來的 比如中綴表示式為 3 5x 2 6 1 對應的字首表示式為 3 x 5 2 6 1 對於中綴表示式從右向左遍歷轉換為字首表示式,中途要是用棧進行儲存 轉換規則如下 波蘭表示式 ...

算術表示式求解背景 逆波蘭表示式

逆波蘭表示式是一種把運算子前置的算術表示式,例如普通的表示式2 3的逆波蘭表示法為 2 3。逆波蘭表示式的優點是運算子之間不必有優先順序關係,也不必用括號改變運算次序,例如 2 3 4的逆波蘭表示法為 2 3 4。本題求解逆波蘭表示式的值,其中運算子包括 四個。輸入 輸入為一行,其中運算子和運算數之...

波蘭逆波蘭表示式

實現乙個基本的計算器來計算簡單的表示式字串。表示式字串只包含非負整數,算符 左括號 和右括號 整數除法需要 向下截斷 你可以假定給定的表示式總是有效的。所有的中間結果的範圍為 231,231 1 class solution s2.push s.substr l,r l l r 碰見符號 else ...