数组实现队列,实际是通过维护队首和队尾变量来实现一个循环数组,从而实现复杂度为1的FIFO队列。
interface Queue<T> {
boolean add(T t) throws Exception;
T take();
}
public class ArrayQueue<T> implements Queue<T> {
T[] array;
int size;
int capacity;
int front;
int rear;
public ArrayQueue(int size) {
this.capacity = size;
this.array = (T[]) new Object[size];
this.size = 0;
this.front = 0;
this.rear = -1;
}
@Override
public boolean add(T t) throws Exception {
if (isFull()) {
throw new Exception("队列已满");
}
rear = (rear + 1) % capacity;
array[rear] = t;
size++;
return true;
}
@Override
public T take() {
if (size <= 0) {
return null;
}
T t = array[front];
front = (front + 1) % capacity;
size--;
return t;
}
boolean isFull() {
if (size == capacity) {
return true;
} else {
return false;
}
}
public static void main(String[] args) throws Exception {
ArrayQueue queue = new ArrayQueue<String>(3);
queue.add("s1");
queue.add("s2");
queue.add("s3");
System.out.println(queue.size);
System.out.println(queue.take());
System.out.println(queue.size);
}
}