一.隊列的定義
隊列是指在表的一端進行插入操作,在另一端進行刪除操作的一種數據結構。它是一種先進先出的線性表,就如同日常生活中排隊的場景一樣,最早進入隊列的人最早離開。在隊列中,先進入的一端稱為隊頭(front),后進入的一端稱為隊尾(rear)。
二.隊列的基本操作
- 初始化——構造一個空隊列
- 入隊——在隊列的隊尾插入一個新元素
- 出隊——刪除隊列的隊頭元素
- 獲取隊頭——取隊列隊頭元素
- 求長度——求出隊列中數據元素的個數
- 判空——判斷當前隊列是否為空
- 正序遍歷——依次訪問隊列中每個元素并且輸出
- 銷毀——銷毀一個已存在的隊列
三.順序隊列
順序隊列可以用簡單的一維數組來進行表示,此外,還可以設置兩個指針front和rear分別指向隊列的頭部和尾部。
四.循環(huán)隊列
由于使用順序隊列在進行隊列的入隊、出隊操作是在兩端進行的,隨著元素的不斷插入、刪除,兩端都向后移動,隊列很快就會移動到數組的末端造成溢出,而前面的單位無法利用,就會造成資源的浪費,因此提出了循環(huán)隊列。
循環(huán)隊列的定義如下:
public class sequenceQueue<T>{
final int maxSize = 10;
private T queueArray[];
private int front;
private int rear;
public sequenceQueue(){} //構造一個隊列
public void enQueue(T obj){} //在隊列隊尾插入一個新元素
public T deQueue(){} //刪除隊列隊頭元素
public T getHead(){} //取隊頭元素
public int size(){} //求隊列中數據元素的個數
public boolean isEmpty(){} //判空
public void nextOrder(){} //遍歷
public void clear(){} //銷毀隊列
}
1.隊列的初始化
public sequenceQueue(){
front = rear = 0;
queueArray = (T[]) new Object[maxSize];
}
2.入隊
public void enQueue(T obj){
if((rear+1)%queueArray.length == front){
System.out.println("error");
}
rear = (rear+1)%queueArray.length;
queueArray[rear] = obj;
}
3.出隊
public T deQueue(){
if(rear = front){
System.out.println("error");
return null;
}
front = (frotn+1)%queueArray.length;
return queueArray[front];
}
4.取頭元素
public T getHead(){
if(rear = front){
System.out.println("error");
return null;
}
front = (front+1)%queueArray.length;
return queueArray[front];
}
5.隊列的判空
public boolean isEmpty(){
if(rear = front){
return true;
}
else{
return false;
}
}
6.隊列的長度
public int size(){
return queueArray.length;
}
7.遍歷隊列
public void nextOrder(){
int i,j = front;
for(i=1;i<=size;i++){
j = (j+1)%queueArray.length;
System.out.println(queueArray[j]);
}
}
8.清空隊列
public void clear(){
rear = front;
}