数据结构与算法学习笔记之先进先出的队列

  队列是一种非常实用的数据结构,类似于生活中发排队,可应用于生活,开发中各个方面,比如共享打印机(先请求先打印),消息队列。你想知道他们是怎么工作的么。那就来一起学习一下队列吧

 

正文 一、队列的定义?

1.一种先进先出的线性表

2.只允许入栈 push()和出栈 pop()

在后端(称为rear)进行插入操作,在前端(称为front)进行删除操作。

 

二、如何用代码实现队列? 1.java中JDK提供了Queue接口

使得LinkedList实现了该接口,所以使用队列的时候,一般采用LinkedList。因为LinkedList是双向链表,可以很方便的实现队列的所有功能。

Queue使用时要尽量避免Collection的add()和remove()方法,而是要使用offer()来加入元素,使用poll()来获取并移出元素。它们的优点是通过返回值可以判断成功与否,add()和remove()方法在失败的时候会抛出异常。 如果要使用前端而不移出该元素,使用
element()或者peek()方法。

 

2.数组实现(顺序队列)

 

public class ArrayQueue { //存储数据的数组 private String[] items; //记录数组容量 private int n; private int size; //head记录队头索引,tail记录队尾索引 private int head = 0; private int tail = 0; //申请一个指定容量的队列 public ArrayQueue(int capacity){ items = new String[capacity]; n = capacity; } /* * 入队: * 1.堆满的时,入队失败 * 1.1频繁出入队,造成数组使用不连续 * 1.2在入队的时候,集中触发进行数据搬移 * 2.在末尾插入数据,注意tail指向队尾元素的索引+1 */ public boolean enqueue(String item){ //表示队满 if(head == 0 && tail == n) return false; //表示需要数据搬移 else if(head != 0 && tail == n){ for (int i = head; i < tail; i++) { items[i-head] = items[i]; } head = 0; tail = tail - head; } //将数据加入队列 items[tail++] = item; size++; return true; } //出队:1.队空时,出队失败;2.出队,head索引+1 public String dequeue(){ String res = null; if(head == tail) return res; res = items[head++]; size--; return res; } }

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wpyzwp.html