我们知道 list 头部受限,天然地适合做 Stack,即尾部入,尾部出,我们又知道 list 删除头部的元素是极为低效的,是不是就完全没有办法了呢?只需增加一个指向头部的指针即可。
class FIFOQueue:
def __init__(self):
self.A = []
self.head = 0
def __len__(self):
return len(self.A[self.head:])
def append(self, item):
self.A.append(item)
def extend(self, item):
self.A.extend(item)
def pop(self):
e = self.A[self.head]
self.head += 1
if self.head > 5 and self.head > len(self.A) / 2:
self.A = self.A[self.head:]
self.head = 0
# 截断,避免存储空间的浪费
return e
def __contains__(self, item):
return item in self.A[self.head:]