阿摩線上測驗 登入

申論題資訊

試卷:111年 - 111 高等考試_三級_資訊處理:資料結構#109747
科目:公職◆資料結構
年份:111年
排序:0

申論題內容

一、以下是一中序運算式(Infix expression)轉換(Convert)成後序運算式
62d9ebfad3ba0.jpg
其中資料結構:
“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)

62d9ec1ced6b3.jpg

詳解 (共 1 筆)

詳解 提供者:Grace
請問有人覺得題目有問題嗎?

依程式的邏輯,實際操作後,不管怎麼樣,不只是運算元、運算子,就連"(",也都會被加到postfix string
 
第一步,把"("加入堆operstk。
第二步,把"2"加入postfix string,但因為以下這段,緊接著就把"("也加到postfix string:
while(!empty(operstk)){
    topsymb = pop(operstk);
    add topsymb to the postfix string;
}
 
有人想討論嗎?