特點:先進先出
需要兩個指標, 分別指向頭和尾 ( head & tail )
結構定義:
隊首標記為0, 隊尾標記為-1
給佇列分配記憶體空間 (初始化類似於順序表)
int *data//資料區
int head, tail, length
入隊:
插在尾部
出隊:
head指向head->next
佇列遍歷:
只需要將隊首標記上到隊尾標記上的所有元素依次輸出就好.
輸出隊首標記所在元素.
隊首標記後移一位.
若head == tail,表示這是最後乙個元素.
for(
int i = q->head; i <= q->tail; i++
)
假溢位狀態:q->tail == q->length
3 4 5
口 口 口 口 口
迴圈佇列:
如果q->tail == q->length
, 但佇列內元素沒有達到上限 , 就跳轉到0位置, 繼續存放, 如果q->head == q->length
也一樣, 做到最大化的利用儲存空間
tail head
| |
6 3 4 5
口 口 口 口 口
結構定義:
在原佇列結構定義的基礎上新加乙個int count, 用來記錄佇列中元素個數
當q->count == q->length
, 表示佇列已滿, 不能再插入
佇列遍歷:
程式中有關對head和tail的操作, 都得通過(q->head/tail + 1) % q->length
操作來獲取當前操作位置下標.
當我們從head開始向右遍歷, 如果走到隊尾無人有沒有和tail的值相等. 則將當前遍歷的下標對length取模即可。
當從lenght - 1向下乙個位置移動時, 會移動到0, 而不是length
優先佇列的基礎知識
優先佇列概念 優先佇列是佇列的一種,不過它可以按照自定義的一種方式 資料的優先順序 來對佇列中的資料進行動態的排序每次的push和pop操作,佇列都會動態的調整,以達到我們預期的方式來儲存。例如 我們常用的操作就是對資料排序,優先佇列預設的是資料大的優先順序高所以我們無論按照什麼順序push一堆數,...
優先佇列(堆)基礎知識
優先佇列是一種抽象資料型別,最重要的操作就是刪除最大元素 delmax 和插入元素 insert 二叉堆 能夠很好的實現優先佇列的基本操作 定義 當一顆二叉樹的每個結點都大於等於它的兩個子結點時,它被稱為堆有序。在堆有序的二叉樹中,每個結點都小於等於它的父結點。從任意結點向上,我們都能得到一列非遞減...
優先佇列基礎知識 四 二項佇列
本文主要分析二項佇列。這個優先佇列結構也是為了處理對數時間合併兩個優先佇列而提出來的。它可是保證平均插入時間為常數。同時合併,刪除最小元操作的最壞時間為o logn 這比左式堆更優,左式堆和斜堆是沒辦法實現平均插入時間是常數時間的。二項佇列是通過樹結構來實現的,我們在乙個樹節點中儲存關鍵字,它的右兄...