Queue翻译过来就是队列的意思,队列简单的理解就是像我们排队买车票,排在队伍最前面的会先买到票并离开买票的队伍,其他想买票的人会从队伍后面加进来。所以队列是先进先出(FIFO)的数据结构。本章内容主要参考于《Java数据结构和算法第二版》这本书。
1、定义常用的队列接口
package queue;
/**
* 队列的操作接口定义
* @param <E> 泛型,匹配各种数据类的定义
*/
public interface Queue<E> {
boolean add(E e) throws Exception;
E remove() throws Exception;
E peek() throws Exception;
int size();
String toString();
}
2、实现接口 Queue<E>
package queue;
public class QueueImp<E> implements Queue<E>{
private int maxSize;//队列最大容量
private Object[] queArray;//保存队列的数据
private int front;//队列头下标
private int rear;//队列尾下标
private int nItems;//队列当前元素个数
//初始化队列成员变量
public QueueImp(int s) {
maxSize = s;
queArray = new Object[maxSize];
front = 0;
rear = -1;
nItems = 0;
}
//从队列尾部添加元素
public boolean add(E e) throws Exception{
if (isFull())
throw new Exception("queue is full");
if (rear == maxSize - 1)
rear = -1;
queArray[++rear] = e;
nItems++;
return true;
}
//获取队列头元素并且从队列中删除该元素
public E remove() throws Exception{
if (isEmpty())
throw new Exception("queue is empty");
E e = (E) queArray[front++];
if (front == maxSize)
front = 0;
nItems--;
return e;
}
//获取队列头元素
public E peek() throws Exception{
if (isEmpty())
throw new Exception("queue is empty");
return (E) queArray[front];
}
//判断队列是否为空
public boolean isEmpty(){
return nItems == 0;
}
//判断队列是否溢出
public boolean isFull(){
return nItems == maxSize;
}
//获取队列长度
public int size(){
return nItems;
}
//打印队列
public String toString() {
if (isEmpty())
return "";
String str = "queue: [ ";
for (int i = front; i < maxSize; i++)
str += queArray[i] + " ";
str += "]";
return str;
}
}
3、测试程序及运行结果