當元素較少時(tail
位置在front
後面),迴圈佇列與普通佇列出隊操作一樣,入隊的元素將會放在tail
的位置上,隨後執行tail++
操作;出隊時front
位置上的元素將會置null
,隨後執行front++
操作;此時仍能保持著tail
位置在front
後面的狀態,如下圖所示:
當元素繼續新增,最後乙個元素將放到索引為7
的位置,此時tail
位置將會移動到隊首前面索引為0
的位置上,此時tail
在陣列的索引為變為:(tail+ 1 )% capacity
如下圖所示:
當元素繼續新增時,元素將會在tail
位置上新增,tail
繼續往後移動,如下圖所示:
繼續新增元素,當tail
與front
還相距乙個單位時,即此時陣列還有乙個空餘儲存空間,但當前陣列已經不能繼續實現迴圈佇列的插入操作了,因為迴圈佇列判斷隊列為空的條件就是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...