簡述
隊列是一個有序列表,可以用數(shù)組或是鏈表來實現(xiàn)烫止。
遵循先入先出的原則蒋荚。即:先存入隊列的數(shù)據(jù),要先取出烈拒。后存入的要后取出
實現(xiàn)思路
1)既然是環(huán)形隊列圆裕,那就一定有頭有尾,有容量
2)既然是數(shù)組實現(xiàn)荆几,那一定有個算法保證可以讓數(shù)組循環(huán)起來
實現(xiàn)代碼
/**
* 這是一個重復(fù)可用的環(huán)形鏈表 但是 數(shù)字下標(biāo)為maxSize的位置沒有使用
*/
public class ArrayQueue {
/**
* 最大總量
*/
private int maxSize;
/**
* 隊列頭
*/
private int front;
/**
* 隊列尾
*/
private int rear;
/**
* 存放數(shù)據(jù)用的數(shù)組隊列
*/
private int[] queueArray;
/**
* 初始化一個maxSize長度的數(shù)組隊列吓妆。
*
* @param maxSize
*/
public ArrayQueue(int maxSize) {
this.maxSize = maxSize;
this.queueArray = new int[maxSize];
}
/**
* 判斷隊列是否滿
*/
public boolean isFull() {
return (rear + 1) % maxSize == front;
}
/**
* 判斷隊列是否為空
*/
public boolean isEmpty() {
return rear == front;
}
/**
* 往隊列中添加一個元素
*
* @param element
* @return
*/
public boolean addQueue(int element) {
boolean flag = false;
if (isFull()) {
return flag;
}
//隊尾后移一位
queueArray[rear] = element;
rear = (rear + 1) % maxSize;
flag = true;
return flag;
}
/**
* @return 彈出&獲取當(dāng)前隊首任務(wù)
*/
public int takeQueue() {
if (isEmpty()) {
throw new RuntimeException("隊列為空");
}
//隊首后移一位
int value = queueArray[front];
queueArray[front] = 0;
front = (front + 1) % maxSize;
return value;
}
/**
* 顯示隊列里的數(shù)據(jù)
*/
public void showQueue() {
if (isEmpty()) {
System.out.println("隊列里沒有數(shù)據(jù)");
return;
}
for (int i = front; i < front + size(); i++) {
System.out.println("當(dāng)前數(shù)據(jù)順序位數(shù) = " + queueArray[i]);
}
}
/**
* @return 隊列中有效數(shù)據(jù)個數(shù)
*/
public int size() {
return (rear + maxSize - front) % maxSize;
}
}