python-实现双端队列

# encoding=utf-8

class DoubleQueue(object):
    """双端队列"""
    def __init__(self):
        self.__items = []

    def is_empty(self):
        """判空"""
        return self.__items == []

    def add_front(self, item):
        """在队头添加元素"""
        self.__items.insert(0, item)

    def add_rear(self, item):
        """在队尾添加元素"""
        self.__items.append(item)

    def remove_front(self):
        """从队头删除元素"""
        return self.__items.pop(0)

    def remove_rear(self):
        """从队尾删除元素"""
        return self.__items.pop()

    def size(self):
        """返回队列大小"""
        return len(self.__items)
时间: 2024-12-24 17:46:20

python-实现双端队列的相关文章

python基础教程_学习笔记19:标准库:一些最爱——集合、堆和双端队列

标准库:一些最爱 集合.堆和双端队列 集合 集合Set类位于sets模块中. >>> range(10) [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] >>> set(range(10)) set([0, 1, 2, 3, 4, 5, 6, 7, 8, 9]) 集合是由序列(或其他可迭代的对象)构建的.主要用于检查成员资格,因此,副本是被忽略的: >>> range(10)*2 [0, 1, 2, 3, 4, 5, 6, 7, 8, 9

Python数据类型:双端队列deque-比列表list性能更高的一种数据类型

Python数据类型:双端队列 说到容器类型,大家第一时间想到的多半是list,而list确实也能解决大部分的需要,但碰到列表内的数据量相当大的时候,性能问题就显得尤为重要:再或者列表被恶意注入一个无穷大的数据量时,就可能会暴露出安全问题来.较好的替代方法是:collections.deque.获得性能或安全的同时,牺牲的是数据大小. deque队列两端取出或者删除时间复杂度都是O(1),而列表都是O(n),队列的性能比列表更好 简介 欢迎关注我的公众号:Python雁横 collections

第十一节 双端队列的概念和python代码实现

deque 即双端队列. (deque,全名double-ended queue)是一种具有队列和栈的性质的数据结构.双端队列中的元素可以从两端弹出,其限定插入和删除操作在表的两端进行. 双端队列是限定插入和删除操作在表的两端进行的线性表.这两端分别称做端点1和端点2.也可像栈一样,可以用一个铁道转轨网络来比喻双端队列.在实际使用中,还可以有输出受限的双端队列(即一个端点允许插入和删除,另一个端点只允许插入的双端队列)和输入受限的双端队列(即一个端点允许插入和删除,另一个端点只允许删除的双端队列

实现双端队列

双端队列[double-ended queue]: 描述: 1. 双端队列是一个限定插入和删除操作的数据结构,具有队列和栈的性质. 2. 双端队列中的元素可以从两端弹出,其限定插入和删除操作在表的两端进行. 3. 双端队列是指允许两端都可以进行入队和出队操作的队列,其元素的逻辑结构仍是线性结构.将队列的两端分别称为前端和后端,两端都可以入队和出队. 利用python的list来实现 简洁版: class Deque(object): def __init__(self): self.__list

6.基本数据结构-双端队列(Deque)

一.双端队列(Deque) - 概念:deque(也称为双端队列)是与队列类似的项的有序集合.它有两个端部,首部和尾部,并且项在集合中保持不变. - 特性:deque 特殊之处在于添加和删除项是非限制性的.可以在前面或后面添加新项.同样,可以从任一端移除现有项.在某种意义上,这种混合线性结构提供了单个数据结构中的栈和队列的所有能力. - 注意:即使 deque 可以拥有栈和队列的许多特性,它不需要由那些数据结构强制的 LIFO 和 FIFO 排序.这取决于你如何持续添加和删除操作. 二.Pyth

数据结构 --- 01. 时间复杂度,timeit模块,栈,队列,双端队列

一.时间复杂度 1.基本概念 评判程序优劣的方法: 消耗计算机资源和执行效率(无法直观) 计算算法执行的耗时(适当推荐,因为会受机器和执行环境的影响) 时间复杂度(推荐) 时间复杂度 评判规则:量化算法执行的操作/执行步骤的数量 最重要的项:时间复杂度表达式中最有意义的项 大O记法:O(时间复杂度表达式中最有意义的项) 常见的时间复杂度: O(1) < O(logn) < O(n) < O(nlogn) < O(n^2) < O(n^3) < O(2^n) < O

双端队列deque的应用

collections模块作为基础数据类型的一种扩展,提供了更为丰富的数据结构支持.和list相比,双端队列deque在数组的首部和尾部进行增加和删除元素的时间复杂度都为O(1).而list在数组尾部进行操作的时间复杂度为O(1),在首部进行增加删除数据的时间复杂度为O(n)(涉及到整个数组元素的移动). Deques支持线程安全,内存有效的在队列两端进行删除增加元素操作,在任一方向上具有大致相同的O(1)性能. 类原型:collections.deque([iterable[, maxlen]

8、泛型程序设计与c++标准模板库2.3双端队列容器

双端队列容器是一种放松了访问权限的队列.除了从队列的首部和尾部访问元素外,标准的双端队列也支持通过使用下标操作符"[]"进行直接访问. 它提供了直接访问和顺序访问方法.其头文件为<deque>. 1)双端队列容器的构造函数 有4中形式的构造函数: deque();//构造size()为0的双端队列容器 deque(size_type n,const T& v=T());//初始化大小为n的双端队列,第二个参数是每个元素的初始值,默认为T()构造的对象 deque(c

习题3.26双端队列

#include<stdio.h> #include<stdlib.h> struct Node; struct Queue; typedef struct Node * PtrToNode; typedef struct Queue * PtrToQ; struct Node{ PtrToNode Pre; PtrToNode Next; ElemenType Ele; } struct Queue{ PtrToNode front; PtrToNode rear; }; Ptr

nyoj1117 鸡蛋队列 (双端队列,deque)

题目1117 题目信息 运行结果 本题排行 讨论区 鸡蛋队列 时间限制:1000 ms  |  内存限制:65535 KB 难度:1 描述 将两根筷子平行的放在一起,就构成了一个队列.将带有编号的鸡蛋放到两根筷子之间叫做入队(push),将筷子之间的鸡蛋拿出来叫做出队(pop).但这两种方式有特殊的定义,对于入队,只能将鸡蛋从队列的尾部向里放入:对于出队,只能将鸡蛋从队列的头部向外将鸡蛋拿出来. 将①.②入队: 头____________尾                         ___