任何乙個表示式都是由運算元、運算子和界限符組成的,我們稱它們為單詞。一般地,運算元既可以是常數也可以是被說明為變數或常量的識別符號;運算子可以分為算術運算子、關係運算子和邏輯運算子;基本界限符由左右括號和表示式結束符等。此處,我們討論簡單算術表示式的求值問題,這種表示式只含加、減、乘、除四種運算子以及左右括號兩種及界限符,它的運算規則是:
(1) 先乘除,後加減;
(2) 從左到右;
(3) 先括號內,後括號外。
我們把運算子和界限符統稱為算符,由它們構成的集合命名為op,根據上述3條運算規則,在運算的每一步中,任意兩個相繼出現的算符
(1)(2)
(3)為實現算符優先演算法,可以使用兩個工作棧,乙個稱作optr,用以寄存運算子;另乙個稱作opnd,用以寄存運算元或運算結果。演算法的基本思想是:
(1) 首先置opnd棧和opnd棧為空棧,然後向optr棧壓入表示式起始符「#」。
(2) 依次讀入表示式中每個字元,若是運算元則進opnd棧,若是運算子則和optr棧的棧頂運算子比較優先順序後作相應操作,直至整個表示式求值完畢(即optr棧的棧頂元素和當前讀入的字元均為「#」)。
演算法如下:
operandtype evaluateexperssion()
else}}
return gettop(opnd);
}
棧的應用之表示式求值
include include include include include include using namespace std struct stacknode 用來訪問運算子的棧 struct stacknode1 用於訪問數字的棧 typedef stacknode stack type...
表示式求值(資料結構書上棧的應用之一)
主要內容 表示式求值,提交nyoj通過。思路 主要就是乙個開兩個棧,然後乙個操作符棧,乙個運算元棧。我的 如下 比較簡潔 include include include include include include include include include include define ep...
資料結構 6 棧的應用之中綴表示式求值
參考書籍 資料結構 c語言版 嚴蔚敏 吳偉民編著 清華大學出版社 分析 設操作符棧op棧 運算元棧num棧 op棧裡不可能出現 只可能有 設ch為當前字元,假設輸入都是合法的 1.ch為 則op棧頂為 時ch入棧,否則進行運算直至op棧頂為 2.ch為 則op棧頂為 時ch入棧,否則op棧頂為 此時...