队列原理

数据结构中很重要的一个部分是队列

  • 队列是什么?

排队操作、依次操作、具有前因后果

  • 特点

具有的特点先进先出(FIFO)、有序执行

  • 常见的例子

买东西排队、打饭排队、存钱也要排队,只要需要排队就可以认为是队列,为啥排队呢?因为要保持顺序执行,先来的具有优先权。

  • 可以不使用队列么?

对于大部分场景都必须使用队列,工作人员记忆力不能和电脑比较,同时来四五个人操作,连人都没认清就开始办理业务很容易混淆、容易出现错误,业务混乱、效率不高。一般对于重复的工作和流程,会形成肌肉记忆,效率高,这个可以参考流水线的由来。

  • 程序如何使用队列?

我使用的是Java,本质上编程语言都是结构的实现。队列是有序的保证,只要有序的必须使用队列。大部分程序都已经实现了队列,当然你也可以自己写,其实效率差不了太多,除非要求优化,不然就直接使用吧,亲~,人生苦短用Python,优雅代码选Java,不要纠结。

使用LinkedList队列

LinkedList

LinkedList实现了队列的接口,表示可以使用队列的方法。

implements Deque<E>
Deque<E> extends Queue<E>

当成队列使用的时候,使用队列的方法,就不要再使用get\set这些方法了,虽然效果一样,但是不能表达你的意图,显得你不够专业~

队列接口只有下面几个方法

入队方法

区别:add()当队列满了之后,是抛出异常,而offer()是返回false

boolean add(E e);
 boolean offer(E e);

出队方法(remove当没有元素时,异常,poll返回null)

E remove();
 E poll();

查询头部元素(element没有元素,异常,peek返回null)

E element();
 E peek();

队列 ___ 代码使用:

菜鸟教程 https://www.runoob.com/java/data-queue.html

  • 创建队列
Queue<String> queue = new LinkedList<String>();
  • 入队
queue.offer("a");
  • 出队
    返回第一个元素,并在队列中删除
String a=queue.poll();

查询第一个元素 (最先进去的)

queue.peek()