中綴表示式轉逆波蘭表示式演算法介紹

2021-09-14 01:14:23 字數 729 閱讀 3953

中綴表示式就是我們常見的表示式,比如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 如果遇到操作符,則我們將其放入到棧...