python - 添加队列中的数据

标签 python data-structures queue

我认为队列是第一个来的人首先得到服务的队列。然后其他人在后面加入他。我用 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 == []

但是当我查看在线教程时,我发现队列的实现如下:

class Queue:
    def __init__(self):
        self.items = []

    def isEmpty(self):
        return self.items == []

    def enqueue(self, item):
        self.items.insert(0,item)

    def dequeue(self):
        return self.items.pop()

    def size(self):
        return len(self.items)

根据这个在线实现,item被添加到第一个。但我的直觉告诉我应该将该项目添加到列表的后面(附加)并从前面删除(删除第一项)。我想知道哪种形式是正确的,如果我不正确,那么我没有正确理解的是什么?

最佳答案

两种方法都行。我同意您的直觉,即在右侧添加并在左侧弹出,因此基础列表始终按从旧到新的顺序排列。

就其值(value)而言,这两种实现都是低效的——在位置零处插入或弹出是一个 O(n) 操作。

参见 collections.deque()对于 O(1) 实现。

关于python - 添加队列中的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40445005/

相关文章:

python - 有关为Vexed关卡编写解算器的建议

java - 使用Java制作查询结果表(GUI)

python - 合并两个数据框pandas

python - 在Pandas Python中做与Pivot相反的事情

javascript:对象可以字面上替换数组吗?

ruby-on-rails - 在 Rails 中组织工作进程的最佳方式是什么?

python - 线程轮询 sqs 并将其添加到 python 队列中以处理模具

c - 为什么我的循环仅适用于前几次迭代?

python - 将 Flask 设置为为每个环境单独配置时的非现有路径

c++ - 共享指针递归删除递归数据结构栈溢出