陣列實現佇列

2021-10-24 08:34:45 字數 3326 閱讀 1420

先進先出。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()

}

package com.dstructure.queue;

/** * @author gg_girl

* @date 2020/9/4

* @description todo

* @version 1.0

*/public

class

}

帶nitems的佇列
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...