队列是先进先出的线性表;
队列由于是线性表,因此也有顺序存储和链式存储两种实现方式;
一、顺序存储实现
由于队列的特性是:从队尾添加,从对头删除,因此如果让数组的尾部用作队尾,数组的头部用作队头,则删除元素时,时间复杂度为O(n);
因此我们需要用循环数组实现,并且维护两个属性 front、rear,front用来记录队头的位置,rear记录队尾的下一个位置;比如:
这样能够充分利用数组的空间,但是预先规定了空间就不能再改变;
代码实现如下:
package org.xiazdong.list;
public class MyArrayQueue<T> {
private int front;
private int rear;
private int length;
private T[] t;
public MyArrayQueue(){
front = rear = length = 0;
t = (T[])new Object[20];
}
public void append(T e) throws Exception{
if(length==t.length){
throw new QueueOverFlowException();
}
length++;
t[rea