1. 程式人生 > >字首,中綴,字尾表示式及其求值和轉換

字首,中綴,字尾表示式及其求值和轉換

一.四則運算表示式

我們最常見的運算表示式是 : 12 * (3 + 4) - 6 + 8 / 2 這種型別,這就被稱為是中綴表示式。

我們要用計算機來計算這一串表示式,然而表示式中涉及運算子的優先順序順序還有括號的干擾等,我們必須轉化為一種易於計算的形式,於是這裡就出現了字尾表示式和字首表示式。

二.中綴轉化字尾表示式及其運算

  20世紀50年代,波蘭邏輯學家想到了一種不需要括號的字尾表達法,我們也把它稱為逆波蘭表示,所以字尾表示式又稱為逆波蘭表示式,中綴表示式轉化字尾表示式的規則就是 運算子放置於兩部分運算元之後。

例如:9+(3-1)*3+10/2   分為三部分  9 , (3-1)*3 , 10/2 

按照運算規則  :  [ 9 [(3-1)*3] + ] [10/2] +

繼續由大部分到小部分看為一個整體拆分 : [ 9 [ (3-1) 3 * ] +] [10 2 /] +

繼續:[9 [ (3 1 -)3 * ] +] [10 2 /] +

去括號 : 9 3 1 - 3 * + 10 2 / +  字尾表示式。

(1)字尾表示式的運算

<1> 由中綴轉化字尾表示式的規則和過程可知: 越是關係密切的兩個運算元,其之間的運算子一定緊跟它倆之後,運算完成的數字有可以作為一個運算元。所以這裡我們使用棧來完成運算。

棧求值規則:

字尾表示式從前往後掃;遇到數字入棧;

遇到運算子,選擇棧頂兩元素出棧進行相應運算,將運算結果再入棧。繼續掃

最終運算結果為棧頂元素

注:細節問題:<1>負數判斷 <2>小數判斷 <3> 帶'+'的數字轉化 <4>多位數字轉化整數(123這樣的數字)<5>不合規則的串判斷

<2> 程式碼: