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

2021-08-18 04:07:58 字數 811 閱讀 4347

原則:

從左到右遍歷中綴表示式:

1、如果是數字則直接輸出;

2、如果是左括號,直接入棧;

3、如果是右括號,直接棧頂元素出棧並輸出,直到遇到左括號,左括號只出棧,不輸出;

4、如果是符號,如果優先順序不高於棧頂符號則棧頂元素依次出棧並輸出

如果遇到+、-符號,如果棧非空並且棧頂元素不是左括號,則出棧並且輸出,否則當前符號入棧

如果是*、/符號,如果棧非空且棧頂元素是*或/,則出棧並輸出,否則當前符號入棧

c++實現**:

#include

#include

#include

#include

usingnamespace

std;

int main()

else

if(s[i]=='+'||s[i]=='-')

else}}

else

if(s[i]=='*'||s[i]=='/')

else}}

else

if(s[i]=='(')

else

if(s[i]==')')

stk.pop();  //刪除'('

break;}}

}while(!stk.empty())

cout

return0;

}執行結果:

9+(3-1)*3+10/2

9 3 1 - 3 * + 10 2 / +

program ended with exit code: 0

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

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

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

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

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

op icp064 21isp015 36思路假設表示式為string ex a b c d 將表示式處理為 a b c d 以 做末尾標識,初始時 棧s 中放入乙個 int i 0 icp表示表示式當前掃瞄項的字元的優先順序,isp表示棧頂操作符的優先順序 優先順序表如上 當 棧非空 或 當前掃瞄...