Fork me on GitHub

队列

一、什么是队列

队列是一种先进先出的(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)

 

posted @ 2021-02-28 15:20  iveBoy  阅读(153)  评论(0编辑  收藏  举报
TOP