别的不多说直接上代码:
- 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];
- }
来源: http://www.bubuko.com/infodetail-3103984.html