別的不多說直接上代碼:
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]; }