• 队列


    一、什么是队列

    队列是一种先进先出的(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)
    作者:iveBoy
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须在文章页面给出原文连接,否则保留追究法律责任的权利。
  • 相关阅读:
    【python之路39】Python 正则表达式
    【html、CSS、javascript-4】新特征之增强表单
    node调试工具--node-inspector安装
    node多版本管理--nvmw
    transform的影响
    HTML5 input事件检测输入框变化[转载]
    mysql5.7.16安装 初始密码获取及密码重置
    undefined 与void 0
    html 自定义标签使用实现方法
    图片轮播滚动
  • 原文地址:https://www.cnblogs.com/shenjianping/p/14458420.html
Copyright © 2020-2023  润新知