0

値をキューからスタックに移動したい場合(値はキューになく、スタック内にあるはずです)、スタックにプッシュする前にデキューする必要がありますか、それとも自動的にスタックにプッシュしますか?デキューしますか?

4

2 に答える 2

1

実装が標準のキューとスタックである場合は、キューから削除するためにデキューする必要があります。別のスタックにプッシュするだけでは、そのスタックはキューから削除されません。ただし、そもそも値を取得するために、すでにデキューされている可能性があります。

たとえば、QueuePythonモジュールを使用している場合は、キューからアイテム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']
于 2012-10-07T23:55:36.417 に答える
0

あなたが説明する2番目のデザインは、基本的に、アイテムが同時に1つのコレクションにしか存在できないことを意味します. これはかなり使いにくいでしょう。一般に、コレクション (スタックとキュー) は、オブジェクトの状態に影響を与えることなく、あらゆる種類のオブジェクトを格納できる必要があります。

したがって、はい、キューおよび/またはスタックの適切な実装では、アイテムを追加しても後者から削除されません。

于 2012-10-08T00:05:48.907 に答える