Queue and deque

Queue : 队列

队列(Queue)是常用的数据结构,可以将队列看成特殊的线性表,队列限制了对线性表的访问方式:只能从线性表的一端添加(offer)元素,从另一端取出(poll)元素。

队列遵循先进先出(FIFO First Input First Output )的原则。

JDK中提供了Queue接口,同时使得LinkedList实现了该接口(选择LinkedList实现Queue的原因在于Queue经常要进行插入和删除的操作,而LinkedList在这方面效率较高)。

Queue提供了操作队列的相关方法,其主要方法如下:

  • boolean offer(E e):将元素追加到队列末尾,若添加成功则返回true。
  • E poll():从队首删除并返回该元素。
  • E peek():返回队首元素,但是不删除。

deque : 双端队列

Deque是Queue的子接口,定义了所谓“双端队列”即从队列的两端分别可以入队(offer)和出队(poll),LinkedList实现了该接口。

如果将Deque限制为只能从一端入队和出队,则可实现“栈”(Stack)的数据结构,对于栈而言,入栈称之为push,出栈称之为pop。

栈遵循先进后出(FILO First Input Last Output )的原则。

Deque提供了操作栈的相关方法,其主要方法如下:

  • void push(E e):将给定元素"压入"栈中。存入的元素会在栈首。即:栈的第一个元素
  • E pop():将栈首元素删除并返回。
时间: 2024-11-11 03:41:07

Queue and deque的相关文章

数据结构 - Queue、Deque 接口

简介 队列是一种特殊的线性表.队列有单向队列和双向队列,队列内部结构多大使用数组和链表存储,一般使用数组存储的都会有初试长度和最大长度等,一般使用链表存储没有长度限制.平时在使用中最好不要像队列中插入null(通常也不允许,LinkedList除外),因为null值通常用于poll方法表示当前队列没有元素了,插入null值poll就有歧义. Queue 接口 public interface Queue<E> extends Collection<E> Queue继承Collect

STL 整理(map、set、vector、list、stack、queue、deque、priority_queue)

向量(vector) <vector> 连续存储的元素<vector> Vector<int>c; c.back() 传回最后一个数据,不检查这个数据是否存在. c.clear() 移除容器中所有数据. c.empty() 判断容器是否为空. c.front() 传回地一个数据. c.pop_back() 删除最后一个数据. c.push_back(elem) 在尾部加入一个数据. c[i] 等同于 c.at(i); 列表(list) <list> 由节点组

Java中的queue和deque

队列(queue)是一种常用的数据结构,可以将队列看做是一种特殊的线性表,该结构遵循的先进先出原则.Java中,LinkedList实现了Queue接口,因为LinkedList进行插入.删除操作效率较高 相关常用方法: boolean offer(E e):将元素追加到队列末尾,若添加成功则返回true. E poll():从队首删除并返回该元素. E peek():返回队首元素,但是不删除 示例代码: public class QueueDemo { public static void m

[ZZ] STL 整理(map、set、vector、list、stack、queue、deque、priority_queue) .

转自深秋的落叶 向量(vector) <vector> 连续存储的元素<vector> Vector<int>c; c.back()    传回最后一个数据,不检查这个数据是否存在. c.clear()     移除容器中所有数据. c.empty()   判断容器是否为空. c.front()     传回地一个数据. c.pop_back() 删除最后一个数据. c.push_back(elem)  在尾部加入一个数据. c[i] 等同于 c.at(i); 列表(l

LinkedList(实现了queue和deque接口)实现栈和队列的功能

底层是一个双向链表,链表擅长插入和删除操作,队列和栈最常用的2种操作都设计到插入和删除 import java.util.LinkedList; import java.util.Queue; //用linkedList模拟队列,因为链表擅长插入和删除 public class Hi { public static void main(String [] args) { //做剑指offer遇见过这个数结 Queue<String> queue = new LinkedList<Stri

c++ STL queue:deque+优先队列

/* queue 模板类需要两个模板参数,一个是元素类型,一个容器类型,元素类型是必要的,容器类型是可选的,默认为deque队列   类型.一:定义queue(要有头文件#include <queue>)queue<int> q1;queue<double> q2;二:基本函数back()返回一个引用,指向队列的最后一个元素. empty()函数返回真(true)如果队列为空,否则返回假(false). front()返回队列第一个元素的引用.  pop()函数删除队列

C++各个容器比较(vector,deque,list,set,map,queue,stack)

1.vector(连续的空间存储,可以使用[ ]操作符)可以快速的访问随机的元素,快速的在末尾插入元素,但是在序列中间随机的插入.删除元素要慢.而且,如果一开始分配的空间不够时,有一个重新分配更大空间的过程. 2.deque(小片的连续,小片间用链表相连,实际上内部有一个map的指针,因为知道类型,所以还是可以使用[ ],只是速度没有vector快)快速的访问随机的元素,快速的在开始和末尾插入元素.随机的插入删除元素要慢,空间的从新分配空间后,原有的元素不需要备份.对deque的排序操作,可将d

Coursera Algorithms Programming Assignment 2: Deque and Randomized Queue

这次作业与第一周作业相比,稍微简单一些.有三个编程练习:双端队列(Deque)设计.随机队列(Randomized Queue)设计,还有一个排列组合类Permutation. 一.双端队列Deque 设计要求:A double-ended queue or deque (pronounced "deck") is a generalization of a stack and a queue that supports adding and removing items from e

UVALive-7304 - Queue of Soldiers 【动态规划】【组合函数】【好题】

UVALive- 7304 - Queue of Soldiers 题目链接:7304 题目大意:士兵过山洞,必须以类似7 6 5 4 3 2 1顺序过.在第i个人之后,比i高的人都会被杀死,问如果要杀死k个人,有几种排队方法. 题目思路:先将士兵的身高离散化.假设N表示不同身高的数目.cnt[i] 表示i这个身高的人有多少个.(i的范围为1~N)sum[i]表示小于等于该身高段的士兵数目 然后开始dp,dp[i][j]表示已经到第i个士兵,已经死了j个人的方法数. 第三维遍历,q表示,第i+1