为什么在python中,Stack的pop方法和Queue的dequeue方法在两者都有相同的代码时表现不同?

时间:2017-03-29 13:12:55

标签: python data-structures stack queue pop

当在类pop()中使用列表的Stack方法时,它返回列表的最后一个元素(堆栈的头部),而在类Queue中它返回第一个元素元件。任何人都可以解释一下这背后的原因吗?

# coding: utf-8

class Queue (object):
    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)

class Stack(object):    
    def__init__(self):
        self.items = []

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

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

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

    def peek(self):
        return self.items[len(self.items)-1]

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

q = Queue()
q.enqueue(1)
q.enqueue(2)
q.enqueue(3)
q.enqueue(4)
q.enqueue(5)
q.enqueue(6)

s = Stack()
s.push(1)
s.push(2)
s.push(3)
s.push(4)
s.push(5)
s.push(6)

q.dequeue() #Output: 1

s.pop() #Output: 6

1 个答案:

答案 0 :(得分:1)

  

当在pop()类中使用 [...] 列表的Queue方法时,它会返回第一个元素。

不,它没有。它仍然返回列表的最后一个元素。您不应该关注dequeuepop,而应该专注于Queue.enqueueStack.push方法。

Stack追加items列表,因此将新元素放在最后:

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

Queue 插入items列表的开始

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

因此,当您从堆栈弹出时,将删除 last 添加的元素。当您从队列中弹出时,您将删除 first 添加的元素,因为其他所有内容都已插入其中。

换句话说,Queue按时间顺序保留项目(最新项目位于列表的开头),而Stack按时间倒序保持它们(最新项目位于结尾处)列表)。弹出仍然会从列表中删除最后一个元素。