其中資料結構:
“operstk”:用來儲存運算子的堆疊(Stack) ;
“stacktop(operstk)”:表示 top 指標所指堆疊 operstk 的運算子;
程序(Procedures)或函數(Functions) :
“empty(operstk)”:檢查堆疊 operstk 是否為空的布林函數;
“pop(operstk)”:從堆疊 operstk 中取出一運算子;
“push(operstk, symb)”:將運算子 symb 存入堆疊 operstk;
“precedence(op1,op2)”:布林函數,定義在一沒有左右括弧的中序運算
式中,op1 運算子出現在 op2 運算子的左邊時,當 op1 運算子優先順序不
低於 op2 運算子,則設定成 TRUE,否則為 FALSE。例如,我們給定
precedence(‘*’, ‘+’)=TRUE , precedence(‘+’, ‘+’)=TRUE ,
precedence(‘+’, ‘*’)=FALSE,為了處理運算式左右括弧,設定下列
的 precedence:
precedence(‘(’, op) = FALSE /*op 為任一運算子*/
precedence(op, ‘(’) = FALSE /*op 為除’)’外的任一運算子*/
precedence(op, ‘)’) = TRUE /*op 為除’(’外的任一運算子*/
precedence(‘)’, op) = undefined /*op 為任一運算子*/
以中序運算式(2+3)*4 為例,執行上述演算法,依處理每一個運算子或運
算元時,輸出 postfix string 及 operstk 內容為何(“eos”表示 end of string)
?

Symbol
|
Postfix String
|
operstk
|
(
|
Empty
|
(
|
2
|
2
|
(
|
+
|
2
|
(+
|
3
|
23
|
(+
|
)
|
23+
|
Empty
|
*
|
23+
|
*
|
4
|
23+4
|
*
|
eos
|
23+4*
|
Empty
|
評論0