中綴表示式轉逆波蘭表示式

2021-10-11 03:26:07 字數 768 閱讀 7825

op#(

+ , -

*,/)

icp064

21isp015

36思路

假設表示式為string ex =" a+(b-c)*d"

將表示式處理為 "a+(b-c)*d#" 以#做末尾標識,

初始時 棧s 中放入乙個 # ,int i=0;

icp表示表示式當前掃瞄項的字元的優先順序,isp表示棧頂操作符的優先順序 ,優先順序表如上

當 棧非空 或 當前掃瞄項 ex [i]不是 # 時執行以下操作

1) if ex非操作符,直接輸出,i++;

2)else if ex為操作符,則

if icp>isp, ex[i]入棧

else if icp>isp 一直出棧,直到icp <=isp

else if icp == isp //此時為( ) 或 #

將棧頂元素出棧,讀取下一元素

#include #include #includeusing namespace std;

stacks;

int icp(char ch)

return pr;

}int isp(char ch)

return pr;

}void polish(string a)

else if (icp(a[i]) == isp(s.top()))

else if(icp(a[i]) < isp(s.top()))

中綴表示式轉字尾(逆波蘭)表示式

原則 從左到右遍歷中綴表示式 1 如果是數字則直接輸出 2 如果是左括號,直接入棧 3 如果是右括號,直接棧頂元素出棧並輸出,直到遇到左括號,左括號只出棧,不輸出 4 如果是符號,如果優先順序不高於棧頂符號則棧頂元素依次出棧並輸出 如果遇到 符號,如果棧非空並且棧頂元素不是左括號,則出棧並且輸出,否...

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

中綴表示式就是我們常見的表示式,比如a b。a b在字首表示式顯示為 ab。操作符在運算元的前面 a b在字尾表示式顯示為 ab 操作符在運算元後面。再來複雜一點 a b c。轉化為字尾表示式 乘號的優先順序高於加號,把b c看成整體代號為d,得到a d 已知a b ab 所以a d ad 展開d,...

逆波蘭表示式 中綴表示式 字尾表示式

1 我們這裡要實現的是 將中綴表示式轉換成字尾表示式,然後再計算最終結果,參考部落格。具體轉化演算法如下 中綴表示式a b c d e f g,其轉換成字尾表示式則為abc de f g 轉換過程需要用到棧,具體過程如下 1 如果遇到運算元,我們就直接將其輸出。2 如果遇到操作符,則我們將其放入到棧...