环形队列
代码思路
- 用数组寄存队列的数据
- front指向队首元素
- rear指向队尾元素
- num寄存以后曾经存在的元素个数,有了num,判断队列是否为空是否存满比拟不便
public class Demo2 { public static void main(String[] args) { ArrayQueue queue = new ArrayQueue(5); queue.addNum(10001); queue.addNum(10002); queue.addNum(10003); queue.addNum(10004); queue.addNum(10005); System.out.println(queue.getNum()); System.out.println(queue.getNum()); queue.addNum(1); queue.addNum(2); queue.addNum(3); queue.showQueue(); System.out.println(queue.getNum()); System.out.println(queue.getNum()); System.out.println(queue.getNum()); System.out.println(queue.getNum()); System.out.println(queue.getNum()); System.out.println(queue.getNum()); }}class ArrayQueue { //队列的大小 int maxSize; //用数组来实现队列 int[] arr; //指向队列首元素 int front; //指向队列尾元素 int rear; //以后队列的元素的个数 int num; public ArrayQueue(int maxSize) { this.maxSize = maxSize; this.arr = new int[this.maxSize]; front = -1; rear = -1; } public boolean isFull() { return num == maxSize; } public boolean isEmpty() { return num == 0; } public void addNum(int num) { if (isFull()) { System.out.println("队列已满,无奈在进行入队操作"); return; } //队尾标记后移,指向要放入的元素的地位 if (front == -1 && rear == -1) { front = 0; rear = 0; } else { rear = rear + 1; } if (rear == maxSize) { rear = 0; } arr[rear] = num; this.num++; } public int getNum() { if (isEmpty()) { throw new RuntimeException("队列为空,无奈出队"); } //队首标记后移,指向队首元素 System.out.print("出队元素是:"); this.num--; int res = arr[front]; front++; if (front == maxSize) { front = 0; } return res; } public void showQueue() { if (isEmpty()) { throw new RuntimeException("队列为空,无奈遍历"); } System.out.println("遍历队列"); if (rear >= front) { for (int start = front; start <= rear; start++) { System.out.println(arr[start]); } } else { for (int start = front; start <= maxSize - 1; start++) { System.out.println(arr[start]); } for (int start = 0; start <= rear; start++) { System.out.println(arr[start]); } } }}