别的不多说直接上代码:
class CircleArray{ private int maxSize; // 表示数组的最大容量 //front 变量的含义做一个调整: front 就指向队列的第一个元素, 也就是说 arr[front] 就是队列的第一个元素 //front 的初始值 = 0 private int front; //rear 变量的含义做一个调整:rear 指向队列的最后一个元素的后一个位置. 因为希望空出一个空间做为约定. //rear 的初始值 = 0 private int rear; // 队列尾 private int[] arr; // 该数据用于存放数据, 模拟队列 public CircleArray(int maxSize) { this.maxSize = maxSize; arr = new int[maxSize]; } //判断是否队满 public boolean isFull() { return (rear + 1) % maxSize == front; } //是否对空 public boolean isEmpty() { return rear == front; } //添加数据到队列 public void addQueue(int e) { //判断是否队满 if(isFull()) { throw new RuntimeException("队列满,插入失败.."); } arr[rear] = e; //将rear 后移 rear = (rear+1)%maxSize; } //出队列 public int getQueue() { if(isEmpty()) { throw new RuntimeException("队列空,操作失败。。"); } //front 指向队列的第一个元素 int value = arr[front]; front = (front + 1 ) % maxSize; return value; } //获取有效的数据个数 public int size() { return (rear + maxSize - front) % maxSize; } // 显示队列的所有数据 public void showQueue() { // 遍历 if (isEmpty()) { System.out.println("队列空的,没有数据~~"); return; } // 思路:从front开始遍历,遍历多少个元素 // 动脑筋 for (int i = front; i < front + size() ; i++) { System.out.printf("arr[%d]=%d\n", i % maxSize, arr[i % maxSize]); } } //显示队列的头数据, 注意不是取出数据 public int getHeader() { if(isEmpty()) { throw new RuntimeException("队列为空..."); } return arr[front]; }
原文:https://www.cnblogs.com/zhuangzhongliang/p/11087051.html