1 队列模型
1.1 定义
队列(queue)是插入在一端进行而删除在另一端进行的表
先进先出(FIFO)表
1.2 基本操作
enqueue(入队):在队尾(rear)插入元素
dequeue(出队):删除队头(front)的元素
1.3 特性
以常数时间运行
2 队列的实现
2.1 队列的链表实现
package chapter2.queue.queue_linkedList;
import chapter2.linkedList.MyLinkedList;
public class LinkedListQueue {
private int size;
private MyLinkedList linkedList;
LinkedListQueue() {
linkedList = new MyLinkedList();
size = 0;
}
/**
* 入队
*
* @param element 入队的元素
*/
public void enqueue(Object element) {
linkedList.add(element);
size++;
}
/**
* 出队
*
* @return 出队的元素
*/
public Object dequeue() {
if (isEmpty()) {
System.out.println("队列为空!");
return null;
}
size--;
return linkedList.remove(0);
}
/**
* 获取队头元素
*
* @return 队头元素
*/
public Object first() {
if (isEmpty()) {
System.out.println("队列为空!");
return null;
}
return linkedList.get(0);
}
/**
* 获取队列长度
*
* @return 队列长度
*/
public int size() {
return size;
}
/**
* 判断队列是否为空
*
* @return true/false
*/
public boolean isEmpty() {
return size == 0;
}
}
测试类
package chapter2.queue.queue_linkedList;
public class TestQueue {
public static void main(String args[]) {
LinkedListQueue linkedListQueue = new LinkedListQueue();
linkedListQueue.enqueue("one");
linkedListQueue.enqueue("two");
linkedListQueue.enqueue("three");
System.out.println("dequeue:" + linkedListQueue.dequeue());
System.out.println("size:" + linkedListQueue.size());
System.out.println("empty:" + linkedListQueue.isEmpty());
System.out.println("first:" + linkedListQueue.first());
linkedListQueue.dequeue();
linkedListQueue.dequeue();
System.out.println("empty:" + linkedListQueue.isEmpty());
linkedListQueue.dequeue();
}
}
输出
dequeue:one
size:2
empty:false
first:two
empty:true
队列为空!
2.2 队列的数组实现
package chapter2.queue.queue_array;
public class ArrayQueue {
private int size; //队伍长度
private int front; //队头位置
private int back; //队尾位置
private Object[] elements;
private static final int CAPICITY = 100; //最大容量
ArrayQueue() {
size = 0;
front = 0;
back = -1;
elements = new Object[CAPICITY];
}
/**
* 入队
*
* @param element 入队的元素
*/
public void enqueue(Object element) {
if (back == CAPICITY - 1) {
System.out.println("队列已满");
return;
}
size++; //队伍长度增加1
back++; //队尾移到下一位
elements[back] = element;
}
/**
* 出队
*
* @return 出队的元素
*/
public Object dequeue() {
if (isEmpty()) {
System.out.println("队列为空!");
return null;
}
size--; //队伍长度减少1
Object element = elements[front];
front++; //队头移到下一位
return element;
}
/**
* 获取队头元素
*
* @return 队头元素
*/
public Object first() {
if (isEmpty()) {
System.out.println("队列为空!");
return null;
}
return elements[front];
}
/**
* 获取队列长度
*
* @return 队列长度
*/
public int size() {
return size;
}
/**
* 判断队列是否为空
*
* @return true/false
*/
public boolean isEmpty() {
return size == 0;
}
}
测试类
package chapter2.queue.queue_array;
public class TestQueue {
public static void main(String args[]) {
ArrayQueue arrayQueue = new ArrayQueue();
arrayQueue.enqueue("one");
arrayQueue.enqueue("two");
arrayQueue.enqueue("three");
System.out.println("dequeue:" + arrayQueue.dequeue());
System.out.println("size:" + arrayQueue.size());
System.out.println("empty:" + arrayQueue.isEmpty());
System.out.println("first:" + arrayQueue.first());
arrayQueue.dequeue();
arrayQueue.dequeue();
System.out.println("empty:" + arrayQueue.isEmpty());
arrayQueue.dequeue();
}
}
输出
dequeue:one
size:2
empty:false
first:two
empty:true
队列为空!