package task8.queue; @SuppressWarnings("unchecked") public class CircleQueue<E> { private final static int DEFAULT_SIZE = 10; //用数组来保存循环队列的元素 private Object[] elementData; private int size; //队头 读开始的位置 private int front = 0; //队尾 写开始的位置 private int rear = 0; public CircleQueue() { elementData = new Object[DEFAULT_SIZE]; size = DEFAULT_SIZE; } public CircleQueue(int size) { this.size = size; elementData = new Object[size]; } public boolean isEmpty() { return front == rear; } public int size() { if (isEmpty()) { return 0; } return rear > front ? rear - front : size - (front - rear); } public void enQueue(E data) { int rearPosition = rear; elementData[rearPosition++] = data; rear = rearPosition % size; } public E deQueue() { if (isEmpty()) { return null; } int frontPosition = front; E dataToDeQueue = (E) elementData[frontPosition--]; front = frontPosition < 0 ? frontPosition + size : frontPosition; return dataToDeQueue; } }