中綴表示式就是我們平時最熟悉的算式表示式,操作符在兩個數中間。那麼可以想到字尾表示式就是操作符在兩個數後面。
例子:中綴表示式:1 + 2 * 3
字尾表示式:1 2 3 * +
棧中儲存的是操作符和括號。
從左到右遍歷中綴表示式。
遇到括號
遇到數字
遇到操作符
當中綴表示式遍歷完後,依次彈出棧中的所有元素。
特殊處理:每個數和操作符都有乙個空格,以避免得到的中綴表示式數字粘合在一起。
例如12+3 沒有空格就會出現123+的情況,12和3應該通過空格隔開。
#include
#include
/*比較運算子的優先順序
a大於b返回1,否則返回0,當a是'('時也返回1
*/int
compriority
(char a,
char b)
else
return1;
}/*轉化函式
輸入:中綴表示式的字元陣列
*/void
intopost
(char expre)
else
if(expre[i]
=='('
) s.
push
(expre[i]);
else
if(expre[i]
==')'
) s.
pop();
}else
s.push
(expre[i]);
}}while
(!s.
empty()
) expre[j]
='\0';}
intmain()
用棧實現中綴表示式轉換為字尾表示式
思路 1.從左到右獲取中綴表示式 2.的優先順序最高,遇到直接入棧,直到遇到比他優先順序低的,依次出棧 3.遇到直接入棧,等遇到右括號 後,將 棧的運算子出棧輸出,出棧不輸出 4.如果棧空,直接入棧,否則將棧中優先順序不低於它們的運算子依次彈出,直到棧空或遇到 為止 如下所示 中綴轉字尾 void ...
中綴表示式轉換為字尾表示式
今天我們課前談一談,要說點什麼好呢?最近小甲魚發現,很多魚油在學習資料結構和演算法的時候積極性已經開始有點下降了。甚至很多朋友懷疑資料結構和演算法到底有沒有用?實話說,在大廈的防震設計 消除疾病 防止水源枯竭這些實際問題中,很遺憾,資料結構和演算法幾乎起不到任何直接作用。那為什麼我們要學呢?很簡單,...
中綴表示式轉換為字尾表示式
字尾表示式也叫逆波蘭表示式,其求值過程可以用到棧來輔助儲存。假定待求值的字尾表示式為 6 5 2 3 8 3 則其求值過程如下 1 遍歷表示式,遇到的數字首先放入棧中,此時棧如下所示 2 接著讀到 則彈出3和2,執行3 2,計算結果等於5,並將5壓入到棧中。3 讀到8,將其直接放入棧中。4 讀到 彈...