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

您描述的第二种设计基本上意味着一件物品只能同时出现在一个收藏中。这将是相当尴尬的使用。一般来说,集合(堆栈和队列就是)应该能够存储任何类型的对象而不影响对象的状态。

所以,是的,对于队列和/或堆栈的任何合理实现,向其中添加一个项目不会将其从后者中删除。

于 2012-10-08T00:05:48.907 回答