21. 1,2,及 3 等 3 個數字,依序被壓入(Push)到堆疊(Stack)中,但在壓入過程中,堆疊內的數字可隨
時彈出(Pop)堆疊,下列的輸出中哪一種排序不可能由堆疊的一些 Push 和 Pop 操作產生出來?
(A) 1 2 3
(B) 2 1 3
(C) 2 3 1
(D) 3 1 2
答案:登入後查看
統計: A(43), B(77), C(35), D(279), E(0) #2448916
統計: A(43), B(77), C(35), D(279), E(0) #2448916
詳解 (共 5 筆)
#5640724
條件一:依序被壓入(Push)到堆疊(Stack)中
條件二:在壓入過程中,堆疊內的數字可隨 時彈出(Pop)堆疊
答案(A) 1 2 3
當沒觸發條件二發生時,可順利達成
答案(B) 2 1 3
step1:堆疊內[ 1 ]
step2:堆疊內[ 2 ] #當2要PUSH進去時,觸發條件二,所以2推進去時把1擠出來了
step3:堆疊內[ 2 1 ] #依照條件一,「依序」就是先PUSH數字小的
step4:堆疊內[ 2 1 3 ]
答案(C) 2 3 1
同(B)的 step3
step3:堆疊內[ 2 1 ]
step4:堆疊內[ 2 3 ] #當3要PUSH進去時,觸發條件二,所以3推進去時把1擠出來了
step5:堆疊內[ 2 3 1 ]
答案(D) 3 1 2
依照上述模式,堆疊內第一個數字只會是1或2
因為要符合條件一的「依序」
1在堆疊內,要把 2 放進堆疊,把1彈出來,下一步還是只能放 1進去
至少 1、2 都要在堆疊內,才能放 3,但也只會彈出 2 而已
因此這個堆疊的組合不會發生
1
0
#4591808
全部POP()出去再3、1、2PUSH()進去不行嗎?
2021/3/14
謝謝aabb177的回覆
不過我去看正常堆疊的實作,很多都是POP()出去就釋放記憶體了,沒有再另外形成一個堆疊。
0
0
#5572804
還是不太懂 為什麼答案是這個?
知道堆疊是先進後出
原本 1 2 3 照理說不是變成下列嗎
12
1
pop()可以把位置調換嗎= =?
0
0