package com.coding.basic.queue;
/**
* 用数组实现循环队列
* @author liuxin
*
* @param <E>
*/
public class CircleQueue <E> {
private final static int DEFAULT_SIZE = 10;
//用数组来保存循环队列的元素
private Object[] elementData = new Object[DEFAULT_SIZE] ;
//队头
private int front = 0;
//队尾
private int rear = 0;//指向下一个空位
//实际大小
private int size = 0;
public CircleQueue(int i) {
this.elementData = new Object[i];
}
public boolean isEmpty() {
return size == 0;
}
public boolean isFull() {
return size == elementData.length;
}
public int size() {
return size;
}
public void enQueue(E data) {
if(isFull()){
throw new RuntimeException("The queue is full!!!");
}
elementData[rear] = data;
rear = (rear + 1) % elementData.length;
size++;
}
public E deQueue() {
if(isEmpty()){
throw new RuntimeException("The queue is empty!!!");
}
E result = (E) elementData[front];
elementData[front] = null;
front = (front + 1) % elementData.length;
size--;
return result;
}
}