package com.johnChnia.coding2017.basic.queue; /** * Created by john on 2017/5/6. * * NOTE:循环队列下一个为(i+1)%N,上一个为(i+N-1)%N */ public class CircleQueue { private int rear = -1; private int front = -1; private Object[] array; private static final int DEFAULTCAPACITY = 10; /** * 构造一个空的循环队列 */ public CircleQueue() { array = new Object[DEFAULTCAPACITY]; } /** * 根据传进来的容量构造循环队列 * * @param capacity 队列容量 */ public CircleQueue(int capacity) { array = new Object[capacity]; } /** * 循环队列长度 * * @return 队列长度 */ public int size() { return array.length; } /** * 判断队列是否已经满了 * * @return 如果队列满的话返回true,否则返回false */ public boolean isFull() { if ((rear + 1) % size() == front) { return true; } return false; } /** * 判断队列是否为空 * * @return 如果队列为空返回true,否则返回false */ public boolean isEmpty() { if (rear == -1 && front == -1) { return true; } return false; } /** * 入队操作 */ public void enQueue(int item) throws Exception { if (isFull()) { throw new Exception("队列已满"); } else if (isEmpty()) { rear++; front = rear; array[rear] = item; } else { rear = (rear + 1) % size(); array[rear] = item; } } /** * 出队操作 */ public void deQueue() throws Exception { if (isEmpty()) { throw new Exception("队列为空"); } else if (front == rear) { front = -1; rear = -1; } else { front = (front + 1) % size(); } } public String toString() { StringBuilder sb = new StringBuilder(); sb.append("("); for (int i = 0; i <= size() - 1; i++) { sb.append(array[i]); sb.append(", "); } sb.append(")"); return sb.toString(); } }