一、什么是队列
队列是一种先进先出的(First In First Out)的线性表,简称FIFO。允许插入的一端为队尾,允许删除的一端为队头。
队列也是可以用线性表和链表来实现,只要符合队列先进先出的规则即可。
二、队列的实现
class Queue: def __init__(self): """初始化一个线性表用作队列存储数据""" self.__queue = [] def is_empty(self): """判断队列是否是空""" return self.__queue == [] def enqueue(self, item): """进队列,从尾部添加队列""" self.__queue.append(item) def dequeue(self): """从头部取出元素""" return self.__queue.pop(0) def size(self): """返回队列的大小""" return len(self.__queue)
上面的队列是从尾部进入,从头部出来,这个胃不和头部根据你自己来定义,但是显然这个enqueue方法的复杂度是O(1),假如enqueue方法使用的较少。可以这样实现:
class Queue: ... def enqueue(self, item): """进队列,从头部添加""" self.__queue.insert(0,item) def dequeue(self): """从尾部取出元素,出队列""" return self.__queue.pop() ...
三、双端队列
双端队列(deque,全名double-ended queue),是一种具有队列和栈的性质的数据结构。
双端队列中的元素可以从两端弹出,其限定插入和删除操作在表的两端进行。双端队列可以在队列任意一端入队和出队。
实现:
class Dequeue: def __init__(self): """初始化一个线性表用作队列的容器""" self.__dequeue = [] def is_empty(self): """判断队列是否为空""" return self.__dequeue == [] def add_front(self, item): """在队头添加元素""" self.__dequeue.insert(0, item) def add_rear(self, item): """在队尾添加元素""" self.__dequeue.append(item) def remove_front(self): """从队头删除元素""" return self.__dequeue.pop(0) def remove_rear(self): """从队尾删除元素""" return self.__dequeue.pop() def size(self): """计算队列的大小""" return len(self.__dequeue)