表示式求值都需要2個棧。乙個是符號棧,另乙個是數字棧。
拿上面的字尾式45+ 來說, 咱們剛才將表示式從4+5轉換到45+的過程是咱們一眼就能看出來的,但是計算機不能像咱們這樣做,因為他不會。他只會從表示式的開頭,順序掃瞄表示式的每乙個字元,它不能像咱們一樣 一眼就『看』出來。
計算機是如何轉換的呢?
1.從左到右順序掃瞄表示式的每乙個字元。
2.如果是運算元 則直接壓入數字棧。
3.如果是操作符 則根據符號棧的當前狀態來決定怎麼處理這個符號。
處理運算子的過程:
|- 如果當前符號棧為空,則直接將該運算子壓入符號棧。
|- 如果當前符號棧棧頂符號是左括號『(』則也直接將該運算子壓入符號棧。
|- 如果當前符號棧棧頂符號的優先順序《該運算子,還是直接將該運算子壓棧。
|- 如果當前符號棧棧頂符號的優先順序》=該運算子,則將棧頂運算子(op)取出來,接著從數字棧中取2個數b、a,然後將a(op)b的結果壓入數字棧中。
|- 如果當前符號是右括號『)』,則不將它壓入棧,而是不斷從2個棧中,彈出1個符號和2個運算元,然後將運算結果壓入數字棧 ,直到遇到左括號『(』。
|- 然後繼續向表示式的後面掃瞄,直到表示式結束。
當表示式解析結束的時候,若符號棧不為空,則不斷的從符號棧和數字棧中彈出元素,進行計算。
當符號棧為空後,數字棧棧頂元素就是最後的結果。
中綴表示式求值
中綴表示式用於計算乙個表示式,比如計算器 就是這樣實現的 這兒是用棧的資料結構來實現的。首先輸入乙個字串,表示乙個表示式,然後用乙個棧儲存數字,另外乙個棧儲存符號 如果當前運算子優先順序比棧頂元素優先順序高,則入棧,若當前運算子優先順序小於等於棧頂運算子優先順序,則從數字棧中彈出兩個元素,從符號棧中...
中綴表示式求值
計算 calc.cpp 問題描述 小明在你的幫助下,破密了ferrari設的密碼門,正要往前走,突然又出現了乙個密碼門,門上有乙個算式,其中只有 0 9 求出的值就是密碼。小明數學學得不好,還需你幫他的忙。用整數除法 輸入 輸入檔案calc.in共1行,為乙個算式。輸出 輸出檔案calc.out共1...
中綴表示式求值
include define maxsize 100 可以用中綴表示式求值 using namespace std 計算整數範圍的表示式的值,值的範圍不侷限於0到79 typedef struct sqstack void initstock sqstack s 構造空棧 char gettop s...