用乙個棧裝操作符
1、遇到數字就輸出
2、遇到操作符,如果棧空直接放入,如果左括號直接放入,如果是右括號,輸出並彈出棧頂直到遇到左括號,再把左括號彈出(不用輸出),
如果是四則運算符,如果當前比棧頂優先順序高,直接放入,否則輸出並彈出所有優先順序大於等於當前運算子的,再放入當前運算子。
最後將棧裡剩下的元素輸出彈出
每次彈兩個,算一下,放回去,最後結果就是棧剩下的最後乙個元素
#includeusing namespace std;
class solution
else if(c == '+' || c == '-')
return -1;
}int calculate(string s)
if('0' <= s[i] && s[i] <= '9')
else
else
else if(s[i] == ')')
op.pop();
}else
else
op.push(s[i]);}}
}}
}suffix.push_back(' ');
while(!op.empty())
coutbool flag = false;
for(int i = 0; i < n; i++)
num = 0;
flag = false;
}else if('0' <= suffix[i] && suffix[i] <= '9')
else if(suffix[i] == '+' || suffix[i] == '-' || suffix[i] == '*' || suffix[i] == '/')
else if(suffix[i] == '-')
else if(suffix[i] == '*')
else }}
return s.top();
}};int main()
中綴表示式轉逆波蘭表示式
op icp064 21isp015 36思路假設表示式為string ex a b c d 將表示式處理為 a b c d 以 做末尾標識,初始時 棧s 中放入乙個 int i 0 icp表示表示式當前掃瞄項的字元的優先順序,isp表示棧頂操作符的優先順序 優先順序表如上 當 棧非空 或 當前掃瞄...
中綴表示式轉逆波蘭式並計算
include include include include include include include include include using namespace std 對於輸入串,處理分離出數字串,將其轉換成數字,分離運算子,中綴轉字尾 若當前處理的單位是數字,將其入隊 字串佇列 如...
中綴表示式轉字尾(逆波蘭)表示式
原則 從左到右遍歷中綴表示式 1 如果是數字則直接輸出 2 如果是左括號,直接入棧 3 如果是右括號,直接棧頂元素出棧並輸出,直到遇到左括號,左括號只出棧,不輸出 4 如果是符號,如果優先順序不高於棧頂符號則棧頂元素依次出棧並輸出 如果遇到 符號,如果棧非空並且棧頂元素不是左括號,則出棧並且輸出,否...