隊列
在隊列中第一個被插入的數據項也會第一個被移除(先進先出(FIFO)),理解:現實生活中的排隊,排在第一個的總是第一個離開。
應用:模擬現實生活中類似銀行排隊等待,飛機起飛等待,網絡數據包等待傳送等;
循環隊列理解:隊列在數組中實現時當刪除或插入數據時數據項時不會移動的,它是通過指針來記錄第一個插入和最後一個插入的元素的位置來實現隊首和隊尾的。
代碼實現:
package net.hncu.d0731;
public class QueueModel {
private int maxSize;//空間
private Object[] o;
private int front;//隊首指針
private int rear;//隊尾指針
QueueModel(int maxSize){
//給數組多開闢一個空間是爲了判斷棧爲空和棧滿front和rear值相同的情況
this.maxSize=maxSize+1;
o=new Object[this.maxSize];
front=0;
rear=-1;
}
public void insert(Object j) {
//如果隊尾到了最大值,則重新調到初始位置
if(rear==maxSize-1) {
rear=-1;
}
o[++rear]=j;
}
public Object remove() {
//同樣如果隊首到了最大值也重新調到初始位置
Object temp = o[front++];
if(front==maxSize)
front=0;
return temp;
}
public Object peek() {
return o[front];
}
public boolean isFull() {
return (rear+2==front||front+maxSize-2==rear);
}
public boolean isEmpty() {
return (rear+1==front||front+maxSize-1==rear);
}
public int size() {
if(rear>=front)
return rear-front+1;
else
return (maxSize-front)+(rear+1);
}
}