中綴表示式就是我們常見的表示式,比如a+b。
a+b在字首表示式顯示為:+ab。操作符在運算元的前面
a+b在字尾表示式顯示為:ab+。操作符在運算元後面。
再來複雜一點:a+b*c。轉化為字尾表示式:
乘號的優先順序高於加號,把b*c看成整體代號為d,得到a+d
已知a+b = ab+,所以a+d = ad+
展開d,bc = bc
最後完整的字尾表示式:abc*+
再來一道題更複雜的題:(a-b)*b/c,,轉化為字尾表示式;
把(a-b)看成d,得到d*b/c
把d*b看成e,得到e/c
得到ec/
展開e為db,得到db,推出db*c/
展開d為a-b,得到ab-,推出ab-b*c/
技巧:按中綴表示式來看,越重要的計算,在字尾表示式中越遲計算,從中綴表示式中,最後計算的步驟開始。
演算法描述:
1 建立乙個棧,用於臨時存放操作符
2 遍歷中綴表示式src的每一項 item
(1) 若該項是運算元,則直接放到dst字尾表示式
(2) 若該項是操作符 op
把彈出的操作符放到dst裡,然後把該項放到棧裡。
3 全部處理完成後,把棧裡的剩下的操作符彈出來,放到dst裡
注意:這些演算法不用背,理解並且能像第三板塊裡手寫出來就可以,最多半個月這些演算法你就會忘,用到的時候來看看演算法描述就行。
中綴表示式轉逆波蘭表示式
op icp064 21isp015 36思路假設表示式為string ex a b c d 將表示式處理為 a b c d 以 做末尾標識,初始時 棧s 中放入乙個 int i 0 icp表示表示式當前掃瞄項的字元的優先順序,isp表示棧頂操作符的優先順序 優先順序表如上 當 棧非空 或 當前掃瞄...
中綴表示式轉字尾(逆波蘭)表示式
原則 從左到右遍歷中綴表示式 1 如果是數字則直接輸出 2 如果是左括號,直接入棧 3 如果是右括號,直接棧頂元素出棧並輸出,直到遇到左括號,左括號只出棧,不輸出 4 如果是符號,如果優先順序不高於棧頂符號則棧頂元素依次出棧並輸出 如果遇到 符號,如果棧非空並且棧頂元素不是左括號,則出棧並且輸出,否...
逆波蘭表示式 中綴表示式 字尾表示式
1 我們這裡要實現的是 將中綴表示式轉換成字尾表示式,然後再計算最終結果,參考部落格。具體轉化演算法如下 中綴表示式a b c d e f g,其轉換成字尾表示式則為abc de f g 轉換過程需要用到棧,具體過程如下 1 如果遇到運算元,我們就直接將其輸出。2 如果遇到操作符,則我們將其放入到棧...