先進先出。insert入佇列,remove出佇列。陣列實現有佇列空,佇列滿。
陣列實現佇列
陣列實現簡單佇列有頭和尾「指標」。插入元素,隊尾rear指標上移加1。移除元素,隊頭指標上移加1。
環繞處理(迴圈佇列)
為了避免佇列不滿卻不能插入資料項的情況,可以讓隊頭隊尾指標繞回到陣列開始的位置,這就是迴圈佇列(有時也稱為「快取環」)。迴圈佇列通過nitems資料項計數字段來記錄佇列內元素個數,判斷佇列空滿狀態。有資料項記錄數的佇列,會帶來乙個問題,當隊頭隊尾取一定位置時,無法判斷佇列狀態處於空還是滿。如下面實驗**中,當front指標指向0,rear指標指向3時,佇列可能為空,也可能為滿。解決這個問題的辦法是讓陣列的長度比佇列資料項個數最大值大1,也就是說,陣列長度比佇列最大長度大1。不帶nitems資料記錄項的佇列,需要通過front和rear的複雜計算size(),isempty(),isfull(),因而很少用陣列長度比佇列最大長度大1的方法來實現佇列。
帶nitems的佇列
package com.dstructure.queue;
/** * @classname queue
* @author gg_girl
* @date 2020/9/4
* @description 迴圈佇列
* 有資料項計數字段的佇列
* 在做insert和remove操作時,需要對資料項記錄數字段遞增或遞減操作,雖然這算不上額外的開支
* 但是,在處理大量的插入和刪除操作時,會影響效能。
* 操作:
* insert()
* remove()
* isempty()
* isfull()
* peekfront()或者front()
* peekrear()或者rear()
* display()
* * 資料項記錄數記錄佇列空和佇列滿的狀態
* * 陣列實現,先進元素佔陣列下標從0開始到size-1的位置,再環繞
* 先出元素,從陣列下標0開始,一直到front==size,再環繞
* * 陣列實現佇列
* 有空間大小限制
* @version 1.0
*/public
class
queuewithnitems
// 環繞處理
// 當rear指標超過size-1時,需要回到陣列開始的地方,rear=-1
// 解決佇列截斷的問題,沒有滿卻不能在插入資料項
// 在呼叫insert前,應該判斷佇列是否滿
public
void
insert
(int ele)
this
.array[
++this
.rear]
= ele;
this
.nitems++
;// 資料項計數字段遞增
}// 移除元素
public
intremove()
this
.nitems--
;return tmp;
}// 檢視隊頭元素
public
intfront()
// 檢視隊尾元素
public
intrear()
// 佇列空
public
boolean
isempty()
// 佇列滿
public
boolean
isfull()
}
帶nitems的佇列package com.dstructure.queue;
/** * @author gg_girl
* @date 2020/9/4
* @description todo
* @version 1.0
*/public
class
}
package com.dstructure.queue;
/** * @classname queuewithoutnitems
* @author gg_girl
* @date 2020/9/5
* @description 不帶資料項計數字段的佇列
* 解決了當隊頭隊尾指標取一定位置,佇列可能為空也可能為滿的情況
* @version 1.0
*/public
class
queuewithoutnitems
public
void
insert
(int ele)
this
.array[
++this
.rear]
= ele;
}public
intremove()
return tmp;
}public
boolean
isempty()
public
boolean
isfull()
public
intsize()
else
}}
package com.dstructure.queue;
/** * @author gg_girl
* @date 2020/9/5
* @description
* 不帶nitems的佇列
* 陣列是陣列,佇列是佇列。不要把陣列關係和佇列關係搞混了。
* 空:front+maxsize-1=rear 或者 front+1=rear
* rear-front= maxsize-1 或者 rear-front=1
* 滿:rear+2=front 或者 front+maxsize-2=rear
* rear-front = -2 或者 rear-front = maxsize - 2
* 從滿足空或滿的情況來看rear-front的結果可以得出,當rear和front取一定位置(值)的時候,佇列不是為空就是為滿
* 大小:rear大於等於front時,不是截斷佇列,佇列大小等於rear-front+1,
* 否則截斷佇列時,(maxsize-front)上半截資料項個數,(rear+1)下半截資料項個數
* 佇列大小等於maxsize-front+rear+1
* * 搞清楚了怎麼一回事,但是很少用這種方法實現佇列。(苦澀的)hhh。
* @version 1.0
*/public
class
}
佇列 陣列實現
佇列是一種先進先出的思想。first in first out 我們身邊的與佇列相關例項很多,火車站排隊買票或是買飯是排隊,都是佇列。因此我們很容易想到,佇列是有乙個頭乙個尾的,新來的總是在尾,最先來的總是最先買票或是吃飯,當然,像插隊一類的我們不做考慮,相信我們都不會喜歡這些的。佇列的成員的進出我...
佇列(陣列實現)
在現實中,我們去銀行辦理業務的時候就需要排隊。你來的早,排在前面,就會越早的離開。而在你排的隊就是乙個佇列。佇列是個有序列表,它遵循先進先出的原則。根據佇列的先進先出的原則,我們就可以用 來實現乙個佇列。首先在乙個arrayqueue類中建立乙個陣列來代表乙個佇列 private int array...
陣列實現佇列
咱不囉嗦佇列的特性先進先出,直接上 package com.dfsn.cloud.eureka public class queue arr new object initsize public void add t obj arr pushindex obj pushindex pushindex...