zoukankan      html  css  js  c++  java
  • 队列

    一、什么是队列

    队列是一种先进先出的(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
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须在文章页面给出原文连接,否则保留追究法律责任的权利。
  • 相关阅读:
    LeetCode Subsets II
    LeetCode Rotate Image
    LeetCode Palidrome Number
    LeetCode Generate Parentheses
    LeetCode Maximum Subarray
    LeetCode Set Matrix Zeroes
    LeetCode Remove Nth Node From End of List
    Linux Loop设备 使用
    Linux 文件系统大小调整
    LeetCode N-Queens II
  • 原文地址:https://www.cnblogs.com/shenjianping/p/14458420.html
Copyright © 2011-2022 走看看