我把排队看作是先来的人先到的排队。然后其他人在后面跟着他。为了实现这一点,我用Python编写了以下实现:
class Queue:
def __init__(self):
self.item = []
def enqueue(self,value):
self.item.append(value)
def dequeue(self):
return self.item.pop(0)
def size(self):
return len(self.item)
def isEmpty(self):
return self.item == []
但当我查看在线教程时,我发现queue有以下实现:
^{pr2}$根据这个在线实现,第一项是添加项。但是我的直觉告诉我,这个项目应该被添加到列表的后面(附加),从前面移除(移除第一个项目)。我想知道哪种形式是正确的,如果我是不正确的,那么什么是我没有正确理解的东西?在
任何一种方法都有效。我总是同意你最新的直觉在最左边的顺序。在
值得一提的是,这两种实现都是低效的,在零位置插入或弹出都是O(n)操作。在
有关O(1)实现,请参见collections.deque()。在
在行为和表现上没有差别。
第二个示例将队列的头视为最后一个元素,而代码将第一个元素视为头。
我建议您使用对大多数人都直观的实现,我建议您将它附加到列表中,并像您所做的那样从前面弹出。
需要注意的一点是,在两个实现中,在空列表上调用^{{cd1>}将引发^{{cd2>}异常,该异常会泄露实现的详细信息,即它是以列表的形式实现的。如果你觉得不舒服,你可以自己穿上它。
相关问题 更多 >
编程相关推荐