package queue;
/**
* 用数组实现循环队列
*
* @author liuxin
*
* @param <E>
*/
public class CircleQueue<E> {
private final static int DEFAULT_SIZE = 11;
// 用数组来保存循环队列的元素
private Object[] elementData = new Object[DEFAULT_SIZE];
// 队头
private int front = 0;
// 队尾
private int rear = 0;
public boolean isEmpty() {
return size() == 0;
}
public int size() {
return getArrIndex(front - rear);
}
private int getArrIndex(int i) {
return i % DEFAULT_SIZE;
}
public void enQueue(E data) {
checkCapacity();
elementData[getArrIndex(front)] = data;
front++;
}
private void checkCapacity() {
if (getArrIndex(front - rear + 1) == 0) {
throw new RuntimeException("Queue is full");
}
}
public E deQueue() {
if (size() == 0) {
return null;
}
Object o = elementData[getArrIndex(rear)];
rear++;
return (E) o;
}
@Override
public String toString() {
StringBuilder sb = new StringBuilder();
sb.append("[");
for (int i = 0; i < size(); i++) {
sb.append(elementData[getArrIndex(rear + i)]);
if (i != size() - 1) {
sb.append(",");
}
}
sb.append("]");
return sb.toString();
}
}