怎麼用陣列array實現迴圈佇列(java語言)

迴圈佇列的實現關鍵是在於隊首隊尾兩個指標的關係

front 頭指標

rear 尾指標

定義資料結構:大小,頭尾指標,陣列arr

private int size;private int front;private int rear;private int[] arr;

構造方法傳入size

//構造器初始化,傳入一個引數,sizepublic CircleArray(int size){ this。size = size; arr = new int[size];//初始化佇列大小 this。front = 0;//可以省 this。rear = 0;//可以省}

四個核心方法

push :

不是rear ++ ,

rear = (rear + 1) % size;

pop: 不是front++,

front = (front + 1) % size;

(難)curSize: 當前大小,

(rear + size - front) % size;

isEmpty: 比較頭尾指標是否相等

isFull : 比較

(rear + 1) % size == front;

怎麼用陣列array實現迴圈佇列(java語言)

//判斷佇列大小 public boolean isFull(){ return (rear + 1) % size == front; } public boolean isEmpty(){ return front == rear; } //push public void push(int n){ if(isFull()){ System。out。println(“queue is full”); return; }// rear++;// arr[rear] = n;//普通佇列的寫法 arr[rear] = n; rear = (rear + 1) % size;//這裡秒 } //pop public int pop(){ if(isEmpty()){ System。out。println(“queue is empty”); throw new RuntimeException(“queue is empty”); } //將front 臨時儲存指向的變數,直接彈出無法右移指標 //將front 右移 //返回front 指向的變數 int temp = arr[front]; front = (front + 1) % size; return temp; } //當前size public int curSize(){ //rear = 1, front = 0 , size = 3; return (rear + size - front) % size; } //show public void show(){ if(isEmpty()){ System。out。println(“queue is empty”); throw new RuntimeException(“queue is empty”); } for (int i = front; i < front + curSize(); i++) { System。out。printf(“arr[%d]=%d\n”, i % size, arr[i % size]); } } //顯示隊首; public int getFront(){ if(isEmpty()){ System。out。println(“queue is empty”); throw new RuntimeException(“queue is empty”); } return arr[front]; }

測試一把:

public static void main(String[] args) { //例項化 CircleArray queue = new CircleArray(4); System。out。println(queue。curSize()); queue。push(100); queue。push(80); queue。push(70); queue。push(60); queue。push(50); System。out。println(queue。curSize()); System。out。println(queue。getFront()); System。out。println(queue。isFull()); System。out。println(queue。pop()); System。out。println(queue。isFull()); queue。show();}