java循环队列_Java 循环队列的实现
隊列概念
隊列(Queue)是限定只能在一端插入、另一端刪除的線性表。允許刪除的一端叫做隊頭(front),允許插入的一端叫做隊尾(rear),沒有元素的隊列稱為“空隊列”。
隊列具有先進先出(FIFO)的特性。
普通順序隊列存在的問題
在普通順序隊列中,入隊的操作就是先將尾指針rear右移一個單位,然后將元素值賦值給rear單位。出隊時,則是頭指針front后移一個單位。像這樣進行了一定數量的入隊和出隊操作后,可能會出現這樣的情況:
尾指針rear已指到數組的最后有一個元素,即rear==MaxLen-1,此時若再數組的前面部分可能還有很多閑置空間,即這種溢出并非是真的沒有可用的存儲空間,故稱這種溢出現象為“假溢出”。顯然,必須要解決這一塊假溢出的問題,否則順序隊列就沒有太多使用價值。
循環隊列
循環隊列的存儲結構,頭、尾指針都和普通順序隊列相同。不同的只是將隊列視為“環狀結構”,即data[0]為緊接著data[MaxLen-1]的單元,為相鄰的元素,首位成為一個環。結構如下:
(來自:百科)
代碼實現
全局變量:定義隊列長度
static int MaxLen;
循環隊列基本數據結構的實現:
static classmyQueue{intfront;intrear;intqueueList[];publicmyQueue() {//TODO Auto-generated constructor stub
queueList=new int[MaxLen];
front=0;
rear=0;
}
}
判空函數
public booleanisEmpty() {if(front==rear){return true;
}return false;
}
判滿函數
public booleanisFull(){if(((rear+1)%MaxLen)==front){return true;
}else{return false;
}
}
取隊頭元素
public void queueFront(intgetFront){if(isEmpty()==false){
getFront=queueList[(front+1)%MaxLen];
}else{
System.out.println("ERROR:Queue is Empty");return;
}
}
入隊
public void enQueue(intenData) {if(isFull()==false){
rear=(rear+1)%MaxLen;this.queueList[rear]=enData;
}else{
System.out.println("ERROR:Queue is Full");return;
}
}
出隊
public voidoutQueue() {if(isEmpty()==false){
front=(front+1)%MaxLen;
}else{
System.out.println("ERROR:Queue is Empty");return;
}
}
總結
以上是生活随笔為你收集整理的java循环队列_Java 循环队列的实现的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python3.5兼容2.7吗_Pyth
- 下一篇: 画直线_在鸡面前画一条直线,为什么它会晕