1、從左而右對算數表示式進行掃瞄,每次讀入乙個字元s1[i];
2、若遇到數字或小數點,則立即寫入s2[i],若遇算數運算子,將「 」(空格)寫入s2[i];
3、遇到左括號「(」則壓棧;
4、若遇算術運算子,如果它們的優先順序比棧頂元素高,則直接進棧,否則彈出棧頂元素輸出到s2[i],直到新棧頂元素的優先順序比它低,然後將它壓棧;
5、若遇到右括號「)」,則將棧頂元素輸出到s2[i],直到棧頂元素為「(」,然後相互抵消;當掃瞄到「#」符號,表明表示式串已全部輸入,將棧中的運算子全部輸出到s2[i],並刪除棧頂元素。
1int is_op(char
op)210}
11/*
**************************
*/12
/*判斷運算子的優先順序
*/13
/***************************
*/14
int priority(char
op)1525}
2627
/********************************
*/28
/*中綴表示式,轉換為字尾表示式
*/29
/********************************
*/30
void postfix(char e,char
f)31
46else
if (is_op(e[i])) /*
'+ ,-, *, /'
*/47
53 i++; /*
處理下一元
*/54}55
56while (!stackempty(&opst))
57 f[j++]=pop(&opst);
58 f[j]='\0'
;59 }
中綴表示式轉換為字尾表示式
今天我們課前談一談,要說點什麼好呢?最近小甲魚發現,很多魚油在學習資料結構和演算法的時候積極性已經開始有點下降了。甚至很多朋友懷疑資料結構和演算法到底有沒有用?實話說,在大廈的防震設計 消除疾病 防止水源枯竭這些實際問題中,很遺憾,資料結構和演算法幾乎起不到任何直接作用。那為什麼我們要學呢?很簡單,...
中綴表示式轉換為字尾表示式
字尾表示式也叫逆波蘭表示式,其求值過程可以用到棧來輔助儲存。假定待求值的字尾表示式為 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 讀到 彈...