原則:
從左到右遍歷中綴表示式:
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表示棧頂操作符的優先順序 優先順序表如上 當 棧非空 或 當前掃瞄...