队列,和栈一样,也是一种对数据的“存”和“取”有严格要求的先行存储结构

与栈结构不同的是,队列的俩段都是“开口”,要求数据只能从一端进,从另一端出

图 1 队列存储结构

通常,称进数据的一端为 "队尾",出数据的一端为 "队头",数据元素进队列的过程称为 "入队",出队列的过程称为 "出队"。

不仅如此,队列中数据的进出要遵循 "先进先出" 的原则,即最先进队列的数据元素,同样要最先出队列。拿图 1 中的队列来说,从数据在队列中的存储状态可以分析出,元素 1 最先进队,其次是元素 2,最后是元素 3。此时如果将元素 3 出队,根据队列 "先进先出" 的特点,元素 1 要先出队列,元素 2 再出队列,最后才轮到元素 3 出队列。

栈和队列不要混淆,栈结构是一端封口,特点是"先进后出";而队列的两端全是开口,特点是"先进先出"。

因此,数据从表的一端进,从另一端出,且遵循 "先进先出" 原则的线性存储结构就是队列。

队列的实现

队列存储结构的实现有以下两种方式:

  1. 顺序队列:在顺序表的基础上实现的队列结构;
  2. 链队列:在链表的基础上实现的队列结构;

两者的区别仅是顺序表和链表的区别,即在实际的物理空间中,数据集中存储的队列是顺序队列,分散存储的队列是链队列

队列的实际应用

实际生活中,队列的应用随处可见,比如排队买 XXX、医院的挂号系统等,采用的都是队列的结构。

拿排队买票来说,所有的人排成一队,先到者排的就靠前,后到者只能从队尾排队等待,队中的每个人都必须等到自己前面的所有人全部买票成功并从队头出队后,才轮到自己买票。这就不是典型的队列结构吗?

顺序队列,即采用顺序表模拟实现的队列结构。

我们知道,队列具有以下两个特点:

  1. 数据从队列的一端进,另一端出;
  2. 数据的入队和出队遵循"先进先出"的原则;

因此,只要使用顺序表按以上两个要求操作数据,即可实现顺序队列。首先来学习一种最简单的实现方法。

顺序队列简单实现

由于顺序队列的底层使用的是数组,因此需预先申请一块足够大的内存空间初始化顺序队列。除此之外,为了满足顺序队列中数据从队尾进,队头出且先进先出的要求,我们还需要定义两个指针(top 和 rear)分别用于指向顺序队列中的队头元素和队尾元素,如图 1 所示:

链式队列,简称"链队列",即使用链表实现的队列存储结构。

链式队列的实现思想同孙序列表类似,只需创建两个指针(命名为 top 和 rear)分别指向链表中队列的队头元素和队尾元素,如图所示:

图 1 所示为链式队列的初始状态,此时队列中没有存储任何数据元素,因此 top 和 rear 指针都同时指向头节点。

在创建链式队列时,强烈建议初学者创建一个带有头节点的链表,这样实现链式队列会更简单。

实例一个list 来解答一下

队列是一种特殊的线性表,它只允许在表的前端进行删除操作,而在表的后端进行插入操作。

LinkedList类实现了Queue接口,因此我们可以把LinkedList当成Queue来用。

以下实例演示了队列(Queue)的用法:

另外 注意 :

offer,add 区别:

一些队列有大小限制,因此如果想在一个满的队列中加入一个新项,多出的项就会被拒绝。

这时新的 offer 方法就可以起作用了。它不是对调用 add() 方法抛出一个 unchecked 异常,而只是得到由 offer() 返回的 false。

poll,remove 区别:

remove() 和 poll() 方法都是从队列中删除第一个元素。remove() 的行为与 Collection 接口的版本相似, 但是新的 poll() 方法在用空集合调用时不是抛出异常,只是返回 null。因此新的方法更适合容易出现异常条件的情况。

peek,element区别:

element() 和 peek() 用于在队列的头部查询元素。与 remove() 方法类似,在队列为空时, element() 抛出一个异常,而 peek() 返回 null。

java队列(Queue)相关推荐

  1. Java队列 Queue

    转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/120828046 本文出自[赵彦军的博客] Java队列 Queue Java队列 ...

  2. java lifo 队列_1.8 Java 队列 Queue、双端队列 Deque - Java 知识总结与学习

    queue 在java5中新增加了java.util.Queue接口,用以支持队列的常见操作.该接口扩展了java.util.Collection接口.除了基本的 Collection 操作外,队列还 ...

  3. Java队列Queue

    队列Queue是一个先进先出的数据结构:与list.set同一级别,继承了collection接口. Queue的实现 阻塞队列(BolckingQueue) 非阻塞队列 阻塞队列(BolckingQ ...

  4. java队列——queue详细分析

    Queue: 基本上,一个队列就是一个先入先出(FIFO)的数据结构 Queue接口与List.Set同一级别,都是继承了Collection接口.LinkedList实现了Deque接 口.   Q ...

  5. java队列queue的我觉得很好的使用方式

    LinkedList实现了queue接口,通常使用LinkedList 其中关键两个函数:offer().poll() offer()表示"排队"----插入到队列最前,poll( ...

  6. Java队列Queue的使用

    首先我们需要知道使用队列是什么,以及使用队列的意义. 一个队列基本上可以认为是一个先入先出(FIFO)的数据结构,队列和数组的主要区别就在于,我们在使用数组时,必须在前面就定义好数组的长度,这就有了很 ...

  7. Java队列Queue使用详解(*)

    Queue是java中实现队列的接口,它总共只有6个方法,我们一般只用其中3个就可以了.Queue的实现类有LinkedList和PriorityQueue.最常用的实现类是LinkedList. Q ...

  8. 【Java】Java队列Queue使用详解

    Deque是一个双端队列接口(double ended queue),继承自Queue接口,Deque的实现类是LinkedList.ArrayDeque.LinkedBlockingDeque,其中 ...

  9. java队列(Queue)用法总结

    项目github地址:bitcarmanlee easy-algorithm-interview-and-practice 欢迎大家star,留言,一起学习进步 1.队列的特点 队列是一种比较特殊的线 ...

  10. 中高级工程师Java开发!java队列queue实现

    主要内容 本文是从大型互联网系统的应用角度探讨分布式缓存的.本文站在原理.框架.架构.案例等多个视角对分布式缓存进行了探讨. 互联网系统随着容量需求的陡增,许多看似简单的存储类场景都面临着巨大的容量问 ...

最新文章

  1. Redis源码解析——内存管理
  2. mfc c语言 编辑器,语法高亮编辑控件Scintilla在MFC中的简单使用
  3. caffe 加入 cudnn编译
  4. 二进制位交换,反转,与统计1的个数
  5. 二叉搜索树python,代表python中的二叉搜索树
  6. Redis发布与订阅——PUBLISH SUBSCRIBE
  7. date对象 java_Java_按照指定的日期创建 Date对象
  8. Seesaw Loss:一种面向长尾目标检测的平衡损失函数
  9. sizeof运算符和size_t类型比较
  10. Ubuntu下安装opencv3.2.0,解决anaconda下的Python和安装opencv3.2.0冲突的问题
  11. 博文视点新书快讯第78期
  12. matlab for 循环中怎么做到只取其中一个数_公益心 码客行(8)—— 循环语句
  13. JSON之Asp.net MVC C#对象转JSON,DataTable转JSON,ListT转JSON,JSON转ListT,JSON转C#对象...
  14. HDU 1058 Humble Numbers(DP,数)
  15. 智能管家项目总结(1)
  16. 2021_WSDM_Pre-Training Graph Neural Networks for Cold-Start Users and Items Representation
  17. 亚马逊云科技云知识总结
  18. XTDorne平台搭建无人机仿真环境时遇到的问题及解决
  19. python生成字符画_Python生成字符画 | 文艺数学君
  20. SDUT OJ 多项式求和

热门文章

  1. 计算机教师培训内容,(计算机教师培训内容.doc
  2. 数据结构一元多项式的相加-单链表实现
  3. 从重视研发到建立高效的研发管理体系
  4. HDU 4526 威威猫系列故事——拼车记 dp
  5. Linux学习---Linux入门
  6. R与Rtools版本不兼容问题
  7. ubuntu下amd超频工具_玩转GPU必备 – 我的Linux 工具箱
  8. matlab实现滑动平均滤波(一)
  9. 如何在VM虚拟机下调整窗口大小?
  10. IntelliJ IDEA 查找和替换操作