`
QING____
  • 浏览: 2255302 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Deque

    博客分类:
  • JAVA
 
阅读更多

Deque是双端队列,可以使用FIFO(队列)和FILO(栈),其实现常见的有ArrayDeque,LinkedList、LinkedBlockingDeque(线程安全)

一. ArrayDeque是基于数组实现的,且数组容量是可扩展的(即无容量边界)的双端队列。它不是线程安全的。该类性能可能快于stack,在作为队列时快于LinkedList。

ArrayDeque作为stack的取代类,而使用。

多数情况下,需要对ArrrayDeque作为线性访问来使用。ArrayDeque内部通过对数组结构使用了存取技巧:双向操作数组。在开始,数组的最后索引位置为head标,起始索引为

tail标,从外观上看,类似一个队列。addFirst将触发head游标-1,addLast将触发tail游标+1,直到head == tail时宣布数组尺寸重新分配。当然removeFirst是将head值置为null,

然后head游标+1。removeLast同样。。由此可见,ArrayDeque(包括所有类型的queue)是不能加入null的。

重新设置size时,是将数组的尺寸直接扩充为原来的两倍,此时head=tail,使用数组copy吧0~tail和head~(length -1)的两段数组分别copy到新数组中,

即新数组和原数组的却别就是中间有已被尺寸的空位。

操作示意图0----tail--->|<-----head----end.

二. LinkedList也是非线程安全的,直接原因就是它和AarrayDeque一样在java.util包中,而不是concurrent包中。LinkedList是非常常用的实现stack和queue的API。

三. ArrayBlockingQueue和LinkedBlockingQueue,这2个API是线程安全的,支持阻塞行为的。

ArrayBlockingQueue是一个有界队列API,需要指定队列的尺寸,其内部实现是基于数组,操作技巧:循环数组。数组的操作上,有2个属性putIndex和takeIndex,putIndex是

下一次put时的位置,takeIndex是下一次take操作时的位置,putIndex和takeIndex区间内的数据时可访问的,如果putIndex = takeIndex,说明数组已经“满”或者“空了”。

0---takeIndex-->---<--putIndex---End.

LinkedBlockingQueue是基于链表实现,支持无界队列,同时也可以支持有界队列(需要传递容量参数)。

 

分享到:
评论

相关推荐

    STL的容器deque的使用

    **STL中的deque容器详解** `deque`(双端队列)是C++标准模板库(STL)中的一种重要容器,它提供了类似数组的功能,同时支持在两端进行高效插入和删除操作。与vector相比,deque在两端操作时通常具有更好的性能,...

    6-3 Deque_pta_C++_6-3deque_

    标题中的“6-3 Deque”指的是一个编程练习或课程,可能来自Programming Tournament and Assessment (PTA) 平台,该平台提供各种编程挑战来帮助用户提升技能。在这个练习中,重点是数据结构(DS)的双端队列(Deque)...

    深入研究std_deque.doc

    ### 深入研究std::deque #### 引言 `std::deque`(双端队列)作为C++标准模板库(STL)中的一个重要容器,因其独特的优势而在某些应用场景下优于其他容器如`std::vector`。本文将对`std::deque`进行深入剖析,探讨其...

    SGI STL deque相关代码

    在STL中,`deque`(双端队列)是一种重要的容器,它允许在两端进行快速的插入和删除操作。本篇文章将深入探讨`deque`的实现原理、特性以及相关的编程实践。 `deque`,全称Double Ended Queue,其设计灵感来源于线性...

    deque(STL)

    STL中的deque模板包括迭代器等接口

    C++ STL案例(vector+deque容器)

    案例-评委打分 ...遍历vector容器,取出来每一个选手,执行for循环,可以把10个评分打分存到deque容器中 sort算法对deque容器中分数排序,去除最高和最低分 deque容器遍历一遍,累加总分 获取平均分

    deque dll.rar

    "deque dll.rar" 这个标题暗示了我们正在处理一个关于“deque”数据结构的动态链接库(DLL)文件。在编程领域,deque(双端队列)是C++标准模板库(STL)中的一种容器,而DLL文件则是一种在Windows操作系统中用于...

    深入研究 C++中的 STL Deque 容器

    这篇深入研究C++中的STL `deque`容器的文章旨在探讨在什么情况下`deque`比`vector`更合适,并分析两者在内存管理和性能上的差异。 首先,`deque`和`vector`都允许动态存储和访问元素。然而,它们在内存分配上有显著...

    vector和deque使用方法.doc

    在C++标准模板库(STL)中,`vector`和`deque`是两种常见的动态数组容器,它们都提供了高效地存储和访问元素的功能。在实验报告"vector和deque使用方法"中,我们将深入探讨这两种容器的用法、实现原理以及它们的优缺点...

    每天学点C++(C++实例教程:教程+源码)01deque容器.zip

    本教程聚焦于C++中的一个特定容器——deque(双端队列),它是C++标准模板库(STL)的一部分。 deque,全称Double Ended Queue,是一种线性容器,它允许在两端进行高效地插入和删除操作。与数组类似,deque可以随机...

    vc++中队列deque和queue的使用

    在VC++编程环境中,`deque`(双端队列)和`queue`是两种常用的容器,它们都属于标准模板库(STL)的一部分,用于处理数据的存储和操作。这两个容器在实现队列数据结构时各有特点,适用于不同的场景。在VS2010中,...

    deque.h (包含stl-deque.h的头文件)

    stl30版本中容器deque所引用的头文件,但deque具体实现在std_deque.h

    最近请求次数(python deque)1

    在编程领域,尤其是算法设计和数据结构的应用上,题目“最近请求次数(python deque)1”是一个典型的在线计数问题,它要求我们实现一个名为`RecentCounter`的类,该类能记录在过去3000毫秒内的请求数。这个题目来源...

    python--双端队列deque(csdn)————程序.pdf

    Python中的`collections`模块提供了一个高效且功能丰富的数据结构,其中`deque`(双端队列)是一个重要的部分。双端队列允许我们在其两端进行插入和删除操作,这使得它在很多场景下比列表更加实用,特别是对于需要...

    deque_deque_

    标题中的"deque_deque_"可能是指一个以双端队列(deque)为基础实现的自定义数据结构或类。双端队列(Deque)是C++标准库中的一个容器,它允许在两端进行插入和删除操作,具有高效且灵活的特点。在描述中提到...

    04_list和deque1

    在C++编程中,`list`和`deque`是两种重要的容器,它们属于STL(Standard Template Library,标准模板库)的一部分。这两种容器都用于存储和管理动态大小的元素序列,但它们各自有不同的特性和使用场景。 `list`是一...

    stl-deque.h (C++STL deque的源码)

    stl30版本中容器deque的源码

    壬寅朔月的背包和指针-KHIN的讲义(指针,vector,deque部分)

    在 C++ 中,容器是指可以存储多个元素的数据结构,例如 vector、deque 等。这些容器提供了多种操作,例如插入、删除、访问等。今天,我们将详细介绍容器中的 vector 和 deque,以及指针的使用。 容器概述 容器是 ...

    STL.zip包含vector,deque和丰富的测试用例

    在这个"STL.zip"压缩包中,包含了对vector和deque两种重要容器的自定义实现,以及一系列用于测试这些数据结构的用例。下面我们将深入探讨这两个容器及其相关的编程概念。 首先,`vector`是STL中最常见的动态数组,...

    基于List, Set, Map, Integer, String, Tuple, Deque模块的C++库

    为了在C++环境中实现类似的便利性,我们可以创建一个库,模仿Python的这些容器并结合Integer, String, Tuple, Deque等概念。这个名为"基于List, Set, Map, Integer, String, Tuple, Deque模块的C++库"的目标就是提供...

Global site tag (gtag.js) - Google Analytics