仅仅是逻辑上的循环队列,物理上仍是连续的内存。
public class CircleQueue { int front; int rear; int[] arr; int size; public CircleQueue() { front = -1; rear = -1; arr = new int[32]; size = 32; } public CircleQueue(int capacity) { front = -1; rear = -1; arr = new int[capacity]; size = capacity; } public void enqueue(int val ) { if(isFull()) { return; } if(rear==-1){ front++; } rear = (rear+1)%size; arr[rear] = val; } public int dequeue() { if(isEmpty()) return arr[front]; int val = arr[front]; front = (front+1)%size; return val; } public boolean isFull() { return ((rear + 1)% size) == front ? true : false; } public boolean isEmpty() { if(rear == -1) return true; //怎么将最后一个元素输出? return front == rear ? true : false; } public static void main(String[] args) { CircleQueue queue = new CircleQueue(10); for(int i = 0; i <10; i++) queue.enqueue(i); while(true) { System.out.println(queue.dequeue()); if(queue.isEmpty()){ System.out.println(queue.dequeue()); break; } } } }