认识算法之数据结构(五)队列的认识

347 阅读2分钟

队列的基本概念

队列,和栈一样,也是一种对数据的"读"和"写"的线性存储结构。

和前面所讲的 不同的是:栈是遵循先进后出(FILO)的原理本节所讲的队列遵循的是先进先出(FIFO)的原理,队列的概念如图一所示:

由图我们可以看到,队列呈现的是两端开放的结构,ABCD按照顺序依次排队入列等待处理,由于A先进了,因此第一个处理的便是A数据,A数据处理完后就出队,此时BCD也依次入队,等待逐个逐个的处理。
通常的我们把入数据的一端为"队尾",出数据的一端为"队头",数据进队列的过程称为 "入队",出队列的过程称为 "出队"。

队列的应用

  • 实际应用

在生活中,队列也是很普遍的存在现象,例如排队结账,先结账的先离开、餐厅拿号恰饭,先来的先拿号。

  • 程序中的实现(JAVA)

在Java中,LinkedList类实现了Queue接口,因此我们可以继承并直接调用来实现简单的顺序队列,在实现之前,先讲下LinkedList中所提供的方法:
- add()此方法用于在队列尾部添加元素。
- peek()此方法用于查看队列头而不删除它。如果队列为空,则返回Null。
- element()此方法类似于peek()。当队列为空时,它将产生NoSuchElementException的异常。
-remove()此方法删除并返回队列的头部。当队列为空时,它将产生NoSuchElementException的异常。
-poll()此方法删除并返回队列的头部。如果队列为空,则返回null
了解了上述的方法作用后,我们就能开始写一个简单的顺序队列了
/*
*顺序队列增删的实现
*/
package KtmDemo;
import java.util.Queue;
import java.util.LinkedList;
public class MyQueue {
   public static void main(String[]args)
   {
   	Queue<String> QueueDemo = new LinkedList<>();
   
   	/*使用add()添加数据 */	
   	QueueDemo.add("无论遇到什么困难");
   	QueueDemo.add("微笑着面对它");
   	QueueDemo.add("消除恐惧的最好办法");
   	QueueDemo.add("就是面对恐惧");
   	QueueDemo.add("加油,奥利给!");
   
   	System.out.println("正在排队队列:"+QueueDemo);
   	
   	/* 第一次使用remove()实现数据的出队 */
   	String rm = QueueDemo.remove();
   	System.out.println("已出队的数据为\n"+"“"+rm+"”"+"\n剩余的排队队列为"+QueueDemo);
   	
   	/* 第二次出队使用poll()方法 */
   	rm = QueueDemo.poll();
   	System.out.println("已出队的数据为\n"+"“"+rm+"“"+"\n剩余的排队队列为"+QueueDemo);
   	
   }

}

输出结果

我们可以看到往队列里先放的 无论遇到什么困难 在第一次打印中已被取出,而在第二次打印时,排在队列第二位的微笑着面对它 也被取出,剩下的便是还在队列中的数据了。这样,一个简单的队列就实现了。