何謂迴圈佇列?首先我們要說明的是迴圈佇列仍然是基於陣列實現的。但是為了形象化的說明問題,我們如下圖所示
1.圖中有兩個指標(其實就是兩個整數型變數,因為在這裡有指示作用,所以這裡理解為指標)front、rear,乙個指示隊頭,乙個指示隊尾。
2.rear和front互相追趕著,這個追趕過程就是佇列新增和刪除的過程,如果rear追到head說明佇列滿了,如果front追到rear說明隊列為空。
說明:令佇列空間中的乙個單元閒置,使得佇列非空時,q.rear與q.front之間至少間隔乙個空閒單。3.我們把它掰彎,用的是求餘,這樣兩個值就不會跑出最大範圍,並且可以實現彎曲的效果,所以說對於迴圈佇列我們必須給定最大值maxqsize。這其實是我們臆想的,反正我們要做的就是利用迴圈來解決空間浪費的問題。
☆滿:當佇列新增元素到rear的下乙個元素是head的時候,也就是轉圈子要碰頭了,我們就認為佇列滿了。(q.rear+1)%maxsize=q.front
☆空:當佇列刪除元素到head=rear的時候,我們認為佇列空了。q.rear==q.front,不一定為0
圖示:
以下為自己使用過的簡單的迴圈佇列的例子函式:
//定義結構體
typedef struct
sequeue_t;
//建立佇列
void init_sequeue(sequeue_t * sq)
//判斷佇列是否為空
u8 check_seqeue_empty(sequeue_t * sq)
//入隊
u8 enqueue(sequeue_t *sq ,u8 val)
//入隊
u8 dequeue(sequeue_t * sq)
//剩餘空間
u8 leftspace(sequeue_t * sq)
基於迴圈佇列的BFS的原理及實現
1.故事起源 有乙隻螞蟻出去尋找食物,無意中進入了乙個迷宮。螞蟻只能向上 下 左 右4個方向走,迷宮中有牆和水的地方都無法通行。這時螞蟻犯難了,怎樣才能找出到食物的最短路徑呢?2.思考 螞蟻在起點時,有4個選擇,可以向上 下 左 右某乙個方向走1步。如果螞蟻走過了一段距離,此時也依然只有4個選擇。當...
佇列及實現 迴圈佇列實現
一 佇列 佇列是一種特殊的線性表,它只允許在表的前端 front 進行刪除操作,而在表的後端 rear 進行插入操作。進行插入操作的端稱為隊尾,進行刪除操作的端稱為隊頭。佇列中沒有元素時,稱為空佇列。在佇列這種資料結構中,最先插入的元素將是最先被刪除的元素 反之最後插入的元素將最後被刪除的元素,因此...
for迴圈原理及操作
for迴圈是程式語言中一種迴圈語句,迴圈語句由迴圈體及迴圈的判定條件兩部分組成。js例項 for var i 0 i 100 i 變數初始化var i 1 迴圈條件 i 100 迴圈語句塊console.log i 迴圈變化 i 上述 會迴圈輸出0 99的數值 var i 1 此時i的值為1,迴圈條...