阿摩線上測驗 登入

申論題資訊

試卷:105年 - 105 經濟部所屬事業機構_新進職員甄試_資訊:1.資訊管理、2.程式設計#60305
科目:國營事業◆1.資訊管理 2.程式設計
年份:105年
排序:0

題組內容

四、請依算術運算式(((9+1)*3)/((7-6)+5))-((2*(3-2))+1),回答下列問題:

申論題內容

(二)為求得運算式之值,可採「中序(infix)」、「前序(prefix)」或「後序(postfix)」等表示 法,請從記憶體耗用、程式複雜度觀點,比較此3種表示法何者較佳?為什麼?(6分)

詳解 (共 2 筆)

詳解 提供者:a28205739
中序需要判斷運算子的優先權與括號,因此效率為最差的 前序與後序皆不用考慮運算子優先權與括號,但前序需要使用兩個堆疊站存器而後序僅需要一個,因此後序的效率為最佳
詳解 提供者:Lin Jin
最佳解答提到前序需要兩個stack是因為先把運算式用堆疊存起來了,因為前序運算式計算需要從右讀到左,因此可以用stack來存運算式,透過pop存放運算式的stack來取代讀取,但這只是一種作法,我也可以遍歷字串列來讀取字元。
 
計算後序運算式邏輯
For (由左讀到右):
    字元是運算元:
        push(字元);
    字元是運算子:
        ch1 <- pop();
        ch2 <- pop();
        result <- ch1 運算子 ch2;
        push(result);
for結束後,剩下一個節點,其值為計算最終結果。
前序相較於後序,只差在從右讀到左。