所謂中綴表示式,指的是運算子處於運算元的中間(例:3 * ( 4 + 2 )),中綴表示式是人們常用的算術表示方法,但中綴表示式不容易被計算機解析,因為既要考慮運算子的優先順序,還要考慮括號的處理。但中綴表示式仍被許多程式語言使用,因為它符合人們的普遍用法。字尾表示式,指的是不包含括號,運算子放在兩個運算元的後面,所有的計算按運算子出現的順序,嚴格從左向右進行(不再考慮運算子的優先規則,也不需要考慮括號)。
給出乙個中綴表示式,請將其轉換為字尾表示式並輸出。
輸入格式:
只有一行,是乙個長度不超過1000的字串,表示乙個中綴表示式。表示式裡只包含±*/與小括號這幾種符號。其中小括號可以巢狀使用。運算子、運算元之間用乙個空格分隔,資料保證輸入的運算元中不會出現負數,保證除數不會為0。
輸出格式:
輸出對應的字尾表示式。運算子、運算元之間用乙個空格分隔,但行尾無多餘空格。
輸入樣例:3*
(4+2
)輸出樣例:34
2+*
入棧出棧…
是數字直接輸出,考慮到有的數字會不是個位數需要想辦法計算完之後再輸出
是運算子就檢視棧頂元素,如果棧頂元素運算子優先順序大於等於目前讀入的運算子優先順序,就彈出棧頂運算子,直到小於或者棧空為止
如果是左括號直接入棧
如果是右括號,彈出棧裡的元素直到遇見左括號.
#include
#include
#define print
using
namespace std;
intlev
(char ch)
int flag;
intmain()
continue;}
if(str.
find
(ch)
!=string::npos)
elseif(
lev(ch)
<=
lev(st.
top())
) st.
push
(ch);}
}else
if(ch==
')')
st.pop();
continue;}
else
if(ch==
'(')
else}if
(flag2==1)
while
(!st.
empty()
)}
中綴表示式轉換為字尾表示式
今天我們課前談一談,要說點什麼好呢?最近小甲魚發現,很多魚油在學習資料結構和演算法的時候積極性已經開始有點下降了。甚至很多朋友懷疑資料結構和演算法到底有沒有用?實話說,在大廈的防震設計 消除疾病 防止水源枯竭這些實際問題中,很遺憾,資料結構和演算法幾乎起不到任何直接作用。那為什麼我們要學呢?很簡單,...
中綴表示式轉換為字尾表示式
字尾表示式也叫逆波蘭表示式,其求值過程可以用到棧來輔助儲存。假定待求值的字尾表示式為 6 5 2 3 8 3 則其求值過程如下 1 遍歷表示式,遇到的數字首先放入棧中,此時棧如下所示 2 接著讀到 則彈出3和2,執行3 2,計算結果等於5,並將5壓入到棧中。3 讀到8,將其直接放入棧中。4 讀到 彈...
中綴表示式轉換為字尾表示式
字尾表示式也叫逆波蘭表示式,其求值過程可以用到棧來輔助儲存。假定待求值的字尾表示式為 6 5 2 3 8 3 則其求值過程如下 1 遍歷表示式,遇到的數字首先放入棧中,此時棧如下所示 2 接著讀到 則彈出3和2,執行3 2,計算結果等於5,並將5壓入到棧中。3 讀到8,將其直接放入棧中。4 讀到 彈...