当在类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
答案 0 :(得分:1)
当在
pop()
类中使用 [...] 列表的Queue
方法时,它会返回第一个元素。
不,它没有。它仍然返回列表的最后一个元素。您不应该关注dequeue
和pop
,而应该专注于Queue.enqueue
和Stack.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
按时间倒序保持它们(最新项目位于结尾处)列表)。弹出仍然会从列表中删除最后一个元素。