2012-10-07 89 views

回答

1

如果您的實現是標準隊列和堆棧,那麼您需要將其出隊以將其從隊列中移除。單獨推入另一個堆棧的操作不會將其從隊列中移除。但是,爲了首先獲得價值,您可能已將其出列。

對於例如,如果您使用的是Queue Python模塊,然後Queue.get()將刪除從隊列中返回一個項目。但是這一行爲與將價值推向堆棧無關。


實施例使用一個雙端隊列dequecollections從:

>>> stack = [1,2,3] 
>>> stack 
[1, 2, 3] 

>>> from collections import deque 
>>> queue = deque(['foo', 'bar', 'baz']) 
>>> queue.append('one') 
>>> queue.append('two') 

>>> stack.append('foo') 
>>> stack 
[1, 2, 3, 'foo'] 
>>> queue 
deque(['foo', 'bar', 'baz', 'one', 'two']) 

注意,只是將相同的值到堆棧將沒有任何作用到還包含'foo隊列中。 (即使id('foo')可以是相同的!)

然而,明確從隊列彈出foo會從隊列中刪除:

>>> stack.append(queue.popleft()) 
>>> queue 
deque(['bar', 'baz', 'one', 'two']) 
>>> stack 
[1, 2, 3, 'foo'] 
+0

謝謝你的回答,這有助於澄清我對兩個ADT的不確定性。 :) –

+0

@ user1727148很高興幫助:) –

0

你的描述基本上將意味着一個項目的第二個設計永遠只能是同時在一個集合中。這將是相當尷尬的使用。通常,集合(堆棧和隊列)應該能夠存儲任何類型的對象而不影響對象的狀態。

所以,是的,在隊列和/或堆棧的任何理智的實現中,向其中添加項目不會將其從後者中移除。

相關問題