package com.github.wdn.coding2017.basic.queue;
import java.util.Arrays;
/**
* Created by Administrator on 2017/5/2 0002.
*/
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 static void main(String[] args) {
CircleQueue<Integer> queue = new CircleQueue<>(9);
for (int i = 0; i < 5; i++) {
queue.enQueue(i);
}
System.out.println(Arrays.toString(queue.elementData));
System.out.println("size"+queue.size);
for (int i = 0; i < 3; i++) {
if(!queue.isEmpty()){
System.out.println(queue.deQueue());
}
}
System.out.println(Arrays.toString(queue.elementData));
System.out.println("size"+queue.size);
for (int i = 0; i < 5; i++) {
queue.enQueue(i);
}
System.out.println(Arrays.toString(queue.elementData));
System.out.println("size"+queue.size);
for (int i = 0; i < 2; i++) {
if(!queue.isEmpty()){
System.out.println(queue.deQueue());
}
}
System.out.println(Arrays.toString(queue.elementData));
System.out.println("size"+queue.size);
for (int i = 6; i < 9; i++) {
queue.enQueue(i);
}
System.out.println(queue.front);
System.out.println(queue.rear);
System.out.println(Arrays.toString(queue.elementData));
System.out.println("size"+queue.size);
while (!queue.isEmpty()){
System.out.print(queue.deQueue());
}
System.out.println("");
System.out.println(queue.front);
System.out.println(queue.rear);
System.out.println(queue.isEmpty());
}
public CircleQueue(){
}
public CircleQueue(int defaultSize){
elementData = new Object[defaultSize];
}
public boolean isEmpty() {
return size==0;//front==rear && elementData[front]==null;
}
public int size() {
return size;
}
public void enQueue(E data) {
if(size==elementData.length){
throw new RuntimeException("queue is full");
}
elementData[rear] = data;
size++;
if(rear==elementData.length-1){
rear=0;
}else {
rear++;
}
}
public E deQueue() {
if(isEmpty()){
throw new RuntimeException("queue is empty");
}
E result = (E)elementData[front];
elementData[front]=null;
size--;
if(front==elementData.length-1){
front=0;
}else {
front++;
}
return result;
}
}