佇列 陣列結構實現(迴圈佇列)

2021-10-01 19:19:31 字數 2170 閱讀 1565

當元素較少時(tail位置在front後面),迴圈佇列與普通佇列出隊操作一樣,入隊的元素將會放在tail的位置上,隨後執行tail++操作;出隊時front位置上的元素將會置null,隨後執行front++操作;此時仍能保持著tail位置在front後面的狀態,如下圖所示:

當元素繼續新增,最後乙個元素將放到索引為7的位置,此時tail位置將會移動到隊首前面索引為0的位置上,此時tail在陣列的索引為變為:(tail+ 1 )% capacity如下圖所示:

當元素繼續新增時,元素將會在tail位置上新增,tail繼續往後移動,如下圖所示:

繼續新增元素,當tailfront還相距乙個單位時,即此時陣列還有乙個空餘儲存空間,但當前陣列已經不能繼續實現迴圈佇列的插入操作了,因為迴圈佇列判斷隊列為空的條件就是front == tail,所以此時需要進行擴容操作;因此此處有意識的浪費了乙個空間。

此處可以推出,迴圈佇列元素滿的條件為:tail +1 == front(初步得出,後續會完善為(tail + 1) % capacity == front)

適當情況下,此若時持續進行出隊操作,front的位置也將會從陣列最右端跳轉到陣列最左端開始。此時front在陣列的索引為變為:(front + 1 )% capacity**如下:

package datastructure.chapter3;

/** * @author: zjtmeng

* @date: 2019/12/28 20:13

* @version 1.0

*/public

class

loopqueue

implements

queue

public

loopqueue()

public

intgetcapacity()

/** * 迴圈隊列入隊操作

* @param e

*/@override

public

void

enqueue

(e e)

/** * 迴圈佇列擴容

* @param newcapacity

*/private

void

resize

(int newcapacity)

data = newdata;

front =0;

tail = size;

}@override

public e dequeue()

/** * 檢視隊首元素

* @return

*/@override

public e getfront()

@override

public

intgetsize()

/** * 判斷循佇列是否為空

* @return

*/@override

public

boolean

isempty()

@override

public string tostring()

res.

("] tail");

return res.

tostring();}}

佇列 陣列實現 迴圈佇列

1 陣列佇列.cpp 定義控制台應用程式的入口點。2 3 include4 include5 include abs 6 include7 include8 using namespace std 9 10 定義乙個佇列的結構體11 struct myqueue12 17 18 規則說明 19 nh...

資料結構 佇列 迴圈佇列 陣列實現

佇列是一種特殊的 線性表,特殊之處在於它只允許在表的前端 front 進行刪除操作,而在表的後端 tail 進行插入操作,和棧一樣,佇列是一種操作受限制的線性表。進行插入操作的端稱為隊尾,進行刪除操作的端稱為隊頭。以陣列實現的佇列結構,如果是普通佇列,頻繁增刪元素,會造成陣列記憶體空間的大量流失,所...

陣列實現迴圈佇列

1 動態陣列型別 typedef struct qnode queue 1 分配結構體內存與陣列記憶體 queue initialize1 相應main函式 int main 2 只分配陣列記憶體不分配結構記憶體 int initialize2 queue q 相應main函式 int main 2...