字首,中綴,字尾表示式及其求值和轉換
阿新 • • 發佈:2018-12-12
一.四則運算表示式
我們最常見的運算表示式是 : 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> 程式碼: