題組內容

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

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

詳解 (共 6 筆)

a28205739
a28205739
詳解 #2449751
2017/10/16
中序需要判斷運算子的優先權與括號,因此效率為最差的 前序與後序皆不用考慮運算子優先權與括號,但前序需要使用兩個堆疊站存器而後序僅需要一個,因此後序的效率為最佳
a28205739
a28205739
詳解 #2443839
2017/10/12
前序需判斷符號優先權,並加上括號,因此效...
(共 66 字,隱藏中)
前往觀看
shang
shang
詳解 #6209156
2024/09/13
中序:需額外處理括號與運算優先順序,因此...
(共 440 字,隱藏中)
前往觀看
黑桃Z
黑桃Z
詳解 #5033657
2021/08/23
後序式為佳,因為只須由左到右就可得到答案...
(共 77 字,隱藏中)
前往觀看
Lin Jin
Lin Jin
詳解 #6090223
2024/05/07
最佳解答提到前序需要兩個stack是因為先把運算式用堆疊存起來了,因為前序運算式計算需要從右讀到左,因此可以用stack來存運算式,透過pop存放運算式的stack來取代讀取,但這只是一種作法,我也可以遍歷字串列來讀取字元。
ㅤㅤ
計算後序運算式邏輯
For (由左讀到右):
    字元是運算元:
        push(字元);
    字元是運算子:
        ch1 <- pop();
        ch2 <- pop();
        result <- ch1 運算子 ch2;
        push(result);
for結束後,剩下一個節點,其值為計算最終結果。
前序相較於後序,只差在從右讀到左。
ㅤㅤ
zu Hsu
zu Hsu
詳解 #5627131
2022/10/06
後序式的前方開始讀取,遇到運算元先存入堆...
(共 167 字,隱藏中)
前往觀看