【发布时间】:2018-10-16 19:40:20
【问题描述】:
我正在尝试实现基于循环数组的队列的插入方法,但是无法更新队列的尾部。这是我的代码:
def __init__(self, max_size):
"""
-------------------------------------------------------
Initializes an empty queue. Data is stored in a fixed-size list.
Use: cq = Queue(max_size)
-------------------------------------------------------
Parameters:
max_size - maximum size of the queue (int > 0)
Returns:
a new Queue object (Queue)
-------------------------------------------------------
"""
assert max_size > 0, "Queue size must be > 0"
self._max_size = max_size
self._values = [None] * self._max_size
self._front = 0
self._rear = 0
self._count = 0
def insert(self, value):
'''-------------------------------------------------------
Adds a copy of value to the rear of the queue.
Use: cq.insert( value )
-------------------------------------------------------
Parameters:
value - a data element (?)
Returns:
None
-------------------------------------------------------'''
assert (self._count < self._max_size), 'queue is full'
self._values.append(deepcopy(value))
self._count += 1
self._rear = (self._rear - 1) % self._count
return
有什么建议吗?
编辑: 这是删除实现:
def remove(self):
'''-------------------------------------------------------
Removes and returns value from the queue.
Use: v = cq.remove()
-------------------------------------------------------
Returns:
value - the value at the front of the queue - the value is
removed from the queue (?)
-------------------------------------------------------'''
assert (self._count > 0), 'Cannot remove from an empty queue'
value = self._values[self._front]
self._front = (self._front + 1) % self._count
self._count += -1
return value
【问题讨论】:
-
建议:使用
collections.deque。 -
请解释您所说的“无法更新队列的尾部”是什么意思。这是否意味着您向队列中添加的内容超过了它的 max_size?您没有包含任何从队列中删除的功能;你是否有一个? (阅读提供minimal reproducible example 可能会有所帮助。)您还可以从tour 和阅读How to Ask 中受益。
-
@ScottMermelstein 我的意思是当一个值被添加到队列中时, self._rear 没有正确更新。我插入的值没有添加到队列的尾部
-
一般建议 - 在设置后尝试打印
self._rear的值,以便查看其行为是否符合您的预期。然后您可以查看self._values[self._rear](notself._rear) 是否是您期望的值。顺便说一句,我会强烈质疑您的% self._count是否符合您的预期。
标签: python data-structures queue