什麼是隊列? 隊列是一種線性數據結構,隊列中的元素只能先進先出; 隊列的出口端叫做隊頭,入口端叫做隊尾。 隊列的基本操作 1.入隊: 只允許在隊尾的位置放入元素,新元素的下一個位置將會成為新的隊尾; public void enQueue(int element) throws Exception{ ...
什麼是隊列?
隊列是一種線性數據結構,隊列中的元素只能先進先出;
隊列的出口端叫做隊頭,入口端叫做隊尾。
隊列的基本操作
1.入隊:
-
只允許在隊尾的位置放入元素,新元素的下一個位置將會成為新的隊尾;
public void enQueue(int element) throws Exception{
if((rear+1)%array.length==front){
throw new Exception("隊滿!!!");
}
array[rear]=element;
rear=(rear+1)%array.length;
}
2.出隊:
-
類似於入隊,只允許在對頭的位置移除元素,出隊元素的後一個元素將會成為新的對頭;
-
當一個隊列經過反覆的入隊和出隊操作,還剩下2個元素,這時又有新元素入隊時,在數組不擴容的
-
情況下,將隊尾指針重新指向數組的首位,實現迴圈隊列的數據結構。
public int deQueue() throws Exception{
if(front==rear){
throw new Exception("隊滿!!!");
}
int deElement=array[front];
front=(front+1)%array.length;
return deElement;
}
3.判斷隊滿的情況:
-
當(隊尾下標+1)%數組長度=隊頭下標時,隊滿;
-
隊尾指針指向的位置永遠空出一位,所以隊列最大容量比數組長度小1。
完整代碼
點擊查看代碼
package Queue;
public class MyQueue {
//定義數組
private int[] array;
//對頭指針
private int front;
//隊尾指針
private int rear;
//定義隊列的構造方法(類似數組)
public MyQueue(int capacity){
this.array=new int[capacity];
}
//入隊操作(element:入隊元素)
public void enQueue(int element) throws Exception{
if((rear+1)%array.length==front){
throw new Exception("隊滿!!!");
}
array[rear]=element;
rear=(rear+1)%array.length;
}
//出隊操作
public int deQueue() throws Exception{
if(front==rear){
throw new Exception("隊滿!!!");
}
int deElement=array[front];
front=(front+1)%array.length;
return deElement;
}
//輸出隊列
public void output(){
for(int i=front;i!=rear;i=(i+1)%array.length){
System.out.print(array[i]+" ");
}
}
public static void main(String[] args) throws Exception{
MyQueue myQueue=new MyQueue(6);
myQueue.enQueue(1);
myQueue.enQueue(2);
myQueue.enQueue(3);
myQueue.enQueue(4);
myQueue.enQueue(5);
myQueue.deQueue();
myQueue.deQueue();
myQueue.enQueue(6);
myQueue.enQueue(7);
myQueue.output();
}
}