後序式的運算

2021-08-19 15:47:06 字數 969 閱讀 4473

/*

後序式的運算

說明:將中序式轉換為後序式的好處是,不用處理運運算元先後順序問題,只要依序由表示式由前往後讀取即可。

解法:運算時由後序式的前方開始讀取,遇到運算元先存入堆疊,如果遇到運運算元,則由堆疊中取出兩個運算元進行對應的運算,然後將

結果存回堆疊,如果表示式讀取完畢,那麼堆疊頂的值就是答案了,例如我們計算12+34+* 這個表示式

(也就 是(1+2)*(3+4) ):

讀取 堆疊

1 1

2 12

+ 3

3 33 (1+2後存回)

4 334

+ 37 (3+4後存回)

* 21 (3*7後存回)

*/#include

#include

void evalpf(char*);

double cal(double, char, double

);int main(void

)void evalpf(char*postfix)

;

char temp[2

];

char

token;

int top = 0, i = 0

;

temp[

1] = '\0'

;

while(1

)

break

; }

i++;

}}double cal(double p1, char op, double

p2)}

執行結果:

中序式變成後序式的分析

利用棧進行操作 1.將算式根據運算優先順序次序完全括起來 左右括號的運算優先順序比運算子低。2.從左到右依次掃瞄算數表示式,令讀入的符號為 若 是操作式,則將 輸出到前序式字串中,若 是運算子,則分為以下三種情況要討論 1 左括號,入棧 2 右括號,彈出棧頂運算子,若不是左括號,則將取出的運算子輸出...

多項式運算

多項式運算 順序棧實現 在demo1.cpp基礎上增加 彌補異常處理 以及多位數運算缺點 include include include define ok 1 define error 2 define overflow 1 define ini size 100 typedef int elem...

多項式的冪運算

在寫 過程中發現字元陣列轉字串用.tostring 方法會亂碼,可以用string.valueof argsp 或者用array.tostring args 冪的運算時由於用的是string會出現空間浪費現象,可以用stringbuffer類替換,但是由於計算量不大,所以就沒有改了 package ...