一、概念
像栈一样,队列也是一种线性表。它允许在表的一端插入数据,在另一端删除元素。插入元素的这一端称之为队尾。删除元素的这一端我们称之为队首。
队列的特性:
- 在队尾插入元素,在队首删除元素。
- FIFO(先进先出),就向排队取票一样
二、队列的实现
队列的示意图如下:
队列的实现通过两个指针front和rear来指示队头和队尾元素。这里需要注意,rear指示的是最后一个元素的下一个位置,front指示的是队列的第一个元素。如下图:
根据如上描述我们给出队列的数据结构如下:
public class Queue<E> {
private Object[] data=null;
private int maxSize;
private int front;
private int rear;
public Queue() {
this(10);
}
public Queue(int initialSize){
if (initialSize>0){
this.maxSize=initialSize;
data=new Object[initialSize];
front=rear=0;
}else {
throw new RuntimeException("初始化栈的大小不能小于0");
}
}
}
队列新增元素:
public boolean add(E e){
if (rear==maxSize){
throw new RuntimeException("队列已满");
}else {
data[rear++]=e;
return true;
}
}
队列删除元素:
public E poll(){
if (empty()){
throw new RuntimeException("空队列异常");
}else {
E value=(E)data[front];
data[front++]=null;
return value;
}
}