環形佇列的實現原理

2021-07-13 16:06:30 字數 1105 閱讀 2475

環形佇列是乙個首尾相連的fifo(命名管道)的資料結構,它採用陣列的線性空間。它能很快知道佇列是否為滿或者為空,也能很快的訪問資料。

原理:記憶體上沒有環形結構,因此環形佇列利用陣列的線性空間來實現。當資料到了尾部時,它將轉回到0位置來處理。這個轉回操作通過取模來執行。

構造:邏輯上,將陣列q[0]與q[maxn-1]相連線,形成乙個存放佇列的環形空間。

用陣列下標來標明佇列的讀、寫位置。head 指向可以讀的位置,tail 指向可以寫的位置。

環形佇列的關鍵是判斷隊列為空或者滿。tail 追上 head——>滿

head 追上 tail——>空

判斷方法:

1.附加乙個標誌位 tag

tail 追上 head——>滿——>令 tag=1

head 追上 tail——>空——>令 tag=0

實現方法:

初始化狀態:q ->head = q -> tail = q -> tag =0

隊列為空:( q -> head == q -> tail ) && ( q -> tag ==0)

隊列為滿:( q -> head == q -> tail ) && ( q -> tag ==1)

入隊: 如果佇列不滿,則寫入:

q -> tail = ( q -> tail +1) % ( q -> size )

出隊:如果佇列不為空,則從 head 處讀出:

2.限制 tail 趕上 head ,即隊尾節點與隊首節點之間至少留有乙個元素的空間(預留空間)

head == tail ——>空

( tail +1 ) % maxn == head——>滿

實現方法:

初始化狀態: q -> head = q -> tail =0

隊列為空: q -> head == q -> tail

隊列為滿: ( q -> tail + 1 ) % ( q -> size) == q -> head

入隊:如果佇列不滿,則寫入:

q -> tail = ( q -> tail +1) % ( q -> size )

出隊:如果佇列不為空,則從 head 處讀出:

本文出自 「追尋內心的聲音」 部落格,請務必保留此出處

佇列和環形佇列的實現

1 基本介紹 2 陣列模擬佇列 public class arrayqueuedemo catch exception e break case h trycatch exception e break case e scanner.close flag false break default br...

C 環形佇列實現

總體思想就是不讓rear和front的值超過maxn的大小。於是就在rear和front自增時候模maxn。注意!空隊時rear等於front,滿隊時必須空乙個位置。但是size就是size,說存3個就是存3個 include using namespace std template typenam...

golang環形佇列實現

table of contents 什麼是環形佇列 實現環形佇列圖示過程 golang版 實現過程 參考全部 在乙個指定大小的陣列裡迴圈寫入資料,借用二個指標分別實現入隊標記與出隊標記.也體現了指標的大好用處,請深入體會.大有裨益.如圖所示,乙個環形佇列.含有二個指標 佇列頭指標,佇列尾指標.初始化...