環形佇列是乙個首尾相連的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版 實現過程 參考全部 在乙個指定大小的陣列裡迴圈寫入資料,借用二個指標分別實現入隊標記與出隊標記.也體現了指標的大好用處,請深入體會.大有裨益.如圖所示,乙個環形佇列.含有二個指標 佇列頭指標,佇列尾指標.初始化...