C++經典演算法題-後序式的運算
- 2020 年 2 月 13 日
- 筆記
23.Algorithm Gossip: 後序式的運算
說明
將中序式轉換為後序式的好處是,不用處理運運算元先後順序問題,只要依序由運算式由前往後讀取即可。
解法
運算時由後序式的前方開 堆疊始讀取,遇到運算元先存入堆疊,如果遇到運運算元,則由堆疊中取出兩個運算元進行對應的運算,然後將結果存回堆疊,如果運算式讀取完 畢,那麼堆疊頂的值就是答案了, 例如我們計算12+34+這個運算式(也就是(1+2)*(3+4)): 讀取
1 1 2 1 2 + 3 // 1+2 後存回 3 3 3 4 3 3 4 + 3 7 // 3+4 後存回 * 21 // 3 * 7 後存回
程式碼示例
#include<stdio.h> #include<stdlib.h> void evalPf(char*); double cal(double, char, double); int main(void) { char input[ 80]; printf("輸入後序式:"); scanf("%s", input); evalPf(input); return 0; } void evalPf(char*postfix) { double stack[ 80] ={ 0.0 } ; char temp[ 2]; char token; int top = 0, i = 0; temp[1] = '