【问题标题】:What are the definitions for a queue in Python?Python中队列的定义是什么?
【发布时间】:2015-12-01 14:39:22
【问题描述】:

我有一些堆栈代码,如下所示:

class Stack():

  def init(self):
    self.items = []

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

  def push(self, item):
    return self.items.append(item)

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

  def getElements(self):
    return self.items

队列的等价物是什么?

【问题讨论】:

  • 栈和队列的主要区别是什么?
  • 我会说堆栈是后进先出的,队列是先进先出的?
  • pop/pull: del self.items[0],但是使用列表作为底层数据结构使得拉取或提供 O(n)
  • @Altoyr Exactly :-) 我认为 OP 可能会思考并回答:D
  • @thefourtheye 啊该死的,我以为你是认真的 :)

标签: python python-3.x queue


【解决方案1】:

队列是先进先出的,这很容易做到。

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

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

    def push(self, item):
        return self.items.append(item)

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

    def get_elements(self):
        return self.items

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

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

    def push(self, item):
        return self.items.append(item)

    def pull(self):
        return self.items.pop(0)

    def get_elements(self):
        return self.items

stack = Stack() # items = []
stack.push("A") # items = ["A"]
stack.push("B") # items = ["A", "B"]
stack.push("C") # items = ["A", "B", "C"]
stack.pop() # items = ["A", "B"]

queue = Queue() # items = []
queue.push("A") # items = ["A"]
queue.push("B") # items = ["A", "B"]
queue.push("C") # items = ["A", "B", "C"]
queue.pull() #items = ["B", "C"]

【讨论】:

  • 谢谢,这对我的计算机科学课很有帮助。
【解决方案2】:

不要像 Java 那样使用 Python,为此类基本 ADT 定义类不是“Pythonic”,更不用说由于额外的包装而影响性能。

内置列表可以做到这一点,甚至更多。

堆栈是 LIFO(后进先出)

Using Lists as Stacks

>>> stack = []

# push, use append
>>> stack.append(1)
>>> stack.append(2)
>>> stack.append(3)

# pop
>>> stack.pop() # to get the last inserted element
>>>
3

# isEmpty
>>> if stack:
>>>     print('not empty')

队列是 FIFO(先进先出)

Using Lists as Queues

>>> queue = collections.deque()

# push, use append
>>> queue.append(1)
>>> queue.append(2)
>>> queue.append(3)

# pull, use popleft to get the "first" inserted element
>>> queue.popleft()
>>>
1

【讨论】:

  • 我并不真正关心什么被认为是“Pythonic”。我只想要功能代码
  • @10FG 抱歉,我以为您正在尝试在现实世界的软件中使用此代码(考虑到性能),对于 CS,它们几乎需要 Javified 版本。无论如何,请记住,这是为了教您数据结构,实际使用情况可能会发生变化。
猜你喜欢
  • 2010-11-06
  • 1970-01-01
  • 1970-01-01
  • 2010-11-19
  • 2023-04-03
  • 1970-01-01
  • 2011-08-25
  • 2022-07-21
相关资源
最近更新 更多