中綴表示式有倆個棧,乙個運算元,乙個運算元
步驟是:
1⃣️遇到數字就將數字放入數字棧中
2⃣️遇到字串就要分開考慮
1、是『(』就直接入棧,方便遇到』)『時,就將』('以後所有的運算棧帶入數字棧運算,結果儲存於數字串
2、如果操作棧為空棧直接入棧
3、如果操作棧的棧頂元素優先順序小於帶輸入字元的優先順序直接入棧
4、其他情況就是要將數字棧與操作棧結合,算出結果儲存在數字棧中
5、數字棧中的最後乙個元素即為題解
1、任何中綴表示式都由運算數,運算子,括號(大,中,小),這三部分組成。
2、從中綴表示式的左邊開始掃瞄(腦中自己想像的),若遇到運算數時,則直接將其輸出(不壓入堆疊)。
3、若遇到左括號,則將其壓棧。
4、若遇到右括號,表達括號內的中綴表示式已經掃瞄完畢。這時需將棧頂的運算子依次彈出並輸出,直至遇到左括號[左括號彈出但不輸出]。
5、若遇到的是運算子:
a、如果該運算子的優先順序大於棧頂運算子的優先順序時,將其壓棧
b、如果該運算子的優先順序小於棧頂運算子的優先順序時,將棧頂運算子彈出並輸出,接著和新的棧頂運算 符比較,若大於,則將其壓棧,若小於,繼續將棧頂運算子彈出並輸出…(一直遞迴下去,直至運算子大於棧頂雲算符為止)。
6、最後一步,若掃瞄到中綴表示式的末尾[即掃瞄結束],若堆疊中還有存留的運算子依次彈出並輸出即可。
中綴轉字尾結束後,如何計算呢:
遇到數字直接壓棧,遇到計算符,從棧頂pop倆個元素進行計算。
表示式求值
程式的說明見清華大學出版社 資料結構 c語言版 include include define stack init size 40 define stackincrement 20 define ok 1 define false 0 typedef structs stack typedef st...
表示式求值
既然是表示式求值,自然需要在記憶體中儲存計算結果以及中間值。在 用c語言寫直譯器 一 中提過 變數要求是若型別,而 c 語言中的 view plaincopy to clipboardprint?in basic io.h define memery size 26 typedef enum var...
表示式求值
寫了乙個下午,各種糾結,各種問,終於搞明白了。但是自己還是想出來的一點東西的。很爽歪歪的,哈哈。先貼第一次的 include include include include include includeusing namespace std char data 7 7 int sign char ...