package week08.basic; import java.util.Arrays; /** * 用数组实现循环队列 * @author gallenzhang * * @param <E> */ public class CircleQueue<E> { private final static int DEFAULT_SIZE = 10; // 用数组来保存循环队列的元素 private Object[] elementData = new Object[DEFAULT_SIZE]; //队列的长度 private int size; // 队头 private int front = 0; // 队尾 private int rear = 0; public boolean isEmpty() { return front == rear; } public int size() { return size; } public void enQueue(E data) { if((rear + 1) % elementData.length == front){ int len = elementData.length + elementData.length / 2; elementData = Arrays.copyOf(elementData, len); } elementData[rear] = data; size++; rear = (rear + 1) % elementData.length; } @SuppressWarnings("unchecked") public E deQueue() { if(isEmpty()){ return null; } E e = (E) elementData[front]; front = (front + 1) % elementData.length; size--; return e; } }