package com.dudy.learn01.data_structure.queue;
import java.util.Random;
/**
* 用数组实现循环队列
*/
public class CircleQueue<E> {
private final static int DEFAULT_SIZE = 10;
// 用数组来保存循环队列的元素
private Object[] elementData = new Object[DEFAULT_SIZE];
// 队头
private int front = 0;
// 队尾
private int tear = 0;
public boolean isEmpty() {
return tear == front && elementData[0] == null;
}
public int size() {
if(tear == front && elementData[0]!= null){
return DEFAULT_SIZE;
} else {
return (tear - front + DEFAULT_SIZE) % DEFAULT_SIZE;
}
}
public boolean full(){
return tear == front && elementData[0] != null;
}
public void enQueue(E data) {
if(full()){
System.out.println("队列已满");
} else {
elementData[tear] = data;
tear = (tear + 1) % DEFAULT_SIZE;
}
}
public E deQueue() {
if(isEmpty()) return null;
E e = (E) elementData[front];
elementData[front] = null;
front = (front + 1) % DEFAULT_SIZE;
return e;
}
public static void main(String[] args) {
CircleQueue<Integer> queue = new CircleQueue<>();
Random r = new Random();
queue.enQueue(1);
queue.enQueue(3);
queue.enQueue(4);
queue.enQueue(6);
queue.enQueue(7);
System.out.println(queue.size());
for (int i = 0; i < 10; i++) {
queue.enQueue(r.nextInt(100));
}
System.out.println("size = " + queue.size());
for(int i=0;i < 11 ; i++){
System.out.print(queue.deQueue() + ",");
}
System.out.println("size = " + queue.size());
}
}