/** * 环形链表 */ public class CircleArrayQueue { //数组最大容量 private int maxSize; //队列头,队列第一个元素 private int front; //队列尾部的后一个位置 private int rear; //队列数据容器 private int[] arr; // public CircleArrayQueue(int arrMaxSize) { maxSize = arrMaxSize; arr = new int[maxSize]; //front = 0; //rear = 0; } //判断队列是否满 public boolean isFull() { return (rear + 1) % maxSize == front; } // 判断队列是否为空 public boolean isEmpty() { return front == rear; } // 添加数据到队列 public void addQueue(int n) { if (isFull()) { throw new RuntimeException("队列已满"); } arr[rear] = n; rear = (rear + 1) % maxSize; //if ((rear + 1) != maxSize) { // rear++; //} else { // rear = 0; //} } // 获取队列的数据,出队列 public int getQueue() { if (isEmpty()) { throw new RuntimeException("队列数据不存在!"); } int res = arr[front]; front = (front + 1) % maxSize; return res; } // 显示队列的全部数据 public void showQueue() { if (!isEmpty()) { for (int i = front; i < front + size(); i++) { System.out.printf("arr[%d]=%d\n", i % maxSize, arr[i % maxSize]); } } } /** * 当前队列的有效个数 * * @return */ private int size() { return (rear + maxSize - front) % maxSize; } // 显示队列的头数据 public int headQueue() { if (!isEmpty()) { return arr[front]; } throw new RuntimeException("数据为空"); } }