双端队列抽象数据类型及python实现
双端队列Deque是一种有次数的数据集
跟队列相似,其两端可以称为“首”, “尾”端,但deque中数据项既可以从队首加入,也可以从队尾加入;
数据项也可以从两端移除。
从某种意义上说,双端队列集成了栈和队列的能力。
但双端队列不具有内在的LIFO或者FIFO特性
如果用双端队列来模拟栈或队列
需要使用者自行维护操作的一致性
抽象数据类型Deque
Deque() : 创建一个空双端队列
addFront(item): 将item加入队首
addRear(item): 将item加入队尾
removeFront(): 从队首移除数据项,返回值为移除的数据项
removeRear(): 从队尾移除数据项,返回值为移除数据项
isEmpty(): 返回deque是否为空
size() : 返回值deque中包含数据项的个数
采用List实现
List下标0作为deque的尾端
List下标-1作为deque的首端
操作复杂度
addFront/removeFront O(1)
addRear/removeRear O(n)
class Deque:
def __init__(self):
self.items = []
def isEmpty(self):
return self.items == []
def addFront(self, item):
self.items.append(item)
def addRear(self, item):
self.items.insert(0, item)
def removeFront(self):
return self.items.pop()
def removeRear(self):
return self.items.pop(0)
def size(self):
return len(self.items)