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

詳解 (共 5 筆)

#4592765
不行 這種或許你實際模擬會比較好例如說拿...
(共 60 字,隱藏中)
前往觀看
5
0
#4265166
堆疊是先進後出D. 3 1 2 是不可能...
(共 46 字,隱藏中)
前往觀看
4
1
#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