値をキューからスタックに移動したい場合(値はキューになく、スタック内にあるはずです)、スタックにプッシュする前にデキューする必要がありますか、それとも自動的にスタックにプッシュしますか?デキューしますか?
2 に答える
実装が標準のキューとスタックである場合は、キューから削除するためにデキューする必要があります。別のスタックにプッシュするだけでは、そのスタックはキューから削除されません。ただし、そもそも値を取得するために、すでにデキューされている可能性があります。
たとえば、Queue
Pythonモジュールを使用している場合は、キューからアイテムQueue.get()
を削除して返します。ただし、このアクションは、値をスタックにプッシュすることとは無関係です。
deque
からの両端キューを使用した例collections
:
>>> 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']
あなたが説明する2番目のデザインは、基本的に、アイテムが同時に1つのコレクションにしか存在できないことを意味します. これはかなり使いにくいでしょう。一般に、コレクション (スタックとキュー) は、オブジェクトの状態に影響を与えることなく、あらゆる種類のオブジェクトを格納できる必要があります。
したがって、はい、キューおよび/またはスタックの適切な実装では、アイテムを追加しても後者から削除されません。