队列实现的是一种先入先出(FIFO)策略。队列中的INSERT操作称为ENQUEUE,DELETE操作称为DEQUEUE。队列的先入先出特性如同生活中的排队现象一样。因为队列既有队头,又有队尾,所以在实现是需要一个数组和两个分别指向对头和队尾的属性。关于队列属性,现有以下说明:
1.队头属性指向队头元素所在位置,队尾属性指向队尾元素的下一个位置,即下一个元素即将插入的位置。
2.为防止队列的队头移动会引起数组前端空间的浪费,一般设置队头和队尾两属性循环移动。
3.当队尾元素加一取模等于队头元素时,说明此队列存储空间已满。
4.当队头元素和队尾元素相等时,说明此队列为空。
以下Java实现了队列,此队列的初始容量初始化时可自动设置,当队列已满时,队列将自动扩容为先前容量的二倍,并自动实现元素复制。
import java.lang.reflect.Array;
import java.util.Arrays;
public class ListDemo<T> {
private T[] array;
private int head = 0;
private int tail = 0;
private int size = 0;
private Class<T> T;
@SuppressWarnings("unchecked")
public ListDemo(Class<T> T, int size) {
this.size = size;
this.T = T;
this.array = (T[]) Array.newInstance(T, size);
}
public void enqueue(T input) {
if (tail == size)
tail = 0;
array[tail] = input;
if (++tail % size == head) {
size *= 2;
array = Arrays.copyOf(array, size);
}
}
public T dequeue() {
if(head == size)
head = 0;
if(head == tail)
return null;
else
return array[head++];
}
public boolean empty() {
if (head == tail)
return true;
else
return false;
}
}