佇列是一種特殊的線性表,特殊之處在於它只允許在表的前端(front)進行刪除操作,而在表的後端(rear)進行插入操作,和棧一樣,佇列是一種操作受限制的線性表。進行插入操作的端稱為隊尾,進行刪除操作的端稱為隊頭。
佇列的順序儲存通常由乙個一維陣列,乙個記錄隊頭的變數front,乙個記錄隊尾的變數rear和乙個記錄佇列大小的變數 maxsize組成。結構如下:
#define qdatatype int
typedef
struct queuequeue;
什麼是環形佇列?
rear指向隊頭元素,front為隊尾元素的下標加一,rear 和 front 的初始值都為0;在實現佇列的刪除隊頭操作時,rear變數如何變化呢?如果不改變rear變數的值將佇列的其他元素都向前移一位那麼操作就很麻煩,所以我們直接讓rear變數+1,既指向下乙個元素。在實現插入隊尾操後時,讓front+1,當front 等於 maxsize -1 時,讓front等於 0,這樣就形成了環形佇列。
值得注意的是 我們如何判斷環形鍊錶是空還是滿?
假設陣列長度為n,佇列的長度也為n那麼佇列滿佇列空 rear 和front 都相等無法判別。所以陣列長度為n,佇列的長度只能為 n-1。判定如下
bool is_queuefull
(queue* q)
else
}bool is_queueempty
(queue* q)
else
}
佇列的鏈式儲存一般不設定佇列的大小,它由乙個標誌隊頭的元素 front 和乙個標誌鏈尾的元素rear組成。初始狀態 rear和front都為空。結構如下:
#define qdatatype int
typedef
struct nodenode;
typedef
struct queuequeue;
#include
#include
#include
#define qdatatype int
typedef
struct queuequeue;
queue*
queueinit
(qdatatype maxsize)
;// 初始化佇列
void
queuepush
(queue* q, qdatatype data)
;// 隊尾入佇列
void
queuepop
(queue* q)
;// 隊頭出佇列
bool is_queueempty
(queue* q)
;// 檢測佇列是否為空
bool is_queuefull
(queue* q)
;// 檢測佇列是否為滿
void
queuedestroy
(queue* q)
;// 銷毀佇列
qdatatype queuefront
(queue* q)
;//獲取佇列隊頭元素
qdatatype queuerear
(queue* q)
;//獲取佇列隊尾元素
queue*
queueinit
(qdatatype maxsize)
void
queuepush
(queue* q, qdatatype data)
else
}void
queuepop
(queue* q)
else
}bool is_queuefull
(queue* q)
else
}bool is_queueempty
(queue* q)
else
}qdatatype queuefront
(queue* q)
else
}qdatatype queuerear
(queue* q)
else
else}}
void
queuedestroy
(queue* q)
#include
#include
#include
#define qdatatype int
typedef
struct nodenode;
typedef
struct queuequeue;
// 初始化佇列
void
queueinit
(queue* q)
;// 隊尾入佇列
void
queuepush
(queue* q, qdatatype data)
;// 隊頭出佇列
void
queuepop
(queue* q)
;// 獲取佇列頭部元素
qdatatype queuefront
(queue* q)
;// 獲取佇列隊尾元素
qdatatype queuerear
(queue* q)
;// 檢測佇列是否為空
bool is_queueempty
(queue* q)
;// 銷毀佇列
void
queuedestroy
(queue* q)
;queue*
queueinit()
// 隊尾入佇列
void
queuepush
(queue* q, qdatatype data)
else
}// 隊頭出佇列
void
queuepop
(queue* q)
else
free
(ptr);}
}// 檢測佇列是否為空,如果為空返回非零結果,如果非空返回0
bool is_queueempty
(queue* q)
else
}// 獲取佇列頭部元素
qdatatype queuefront
(queue* q)
else
}// 獲取佇列隊尾元素
qdatatype queuerear
(queue* q)
else
}// 銷毀佇列
void
queuedestroy
(queue* q)
free
(q);
}
資料結構 佇列 佇列的實現(C語言)
1 什麼是佇列?佇列 只允許在一端進行插入資料操作,在另一端進行刪除資料操作的特殊線性表,佇列具有先進先出fifo first in first out 入佇列和出佇列。隊尾 進行插入操作的一端 隊頭 進行刪除操作的一端 詳細了解 佇列的詳解 2 佇列的實現 佇列也可以陣列和鍊錶的結構實現,使用鍊錶...
資料結構 佇列(C語言實現)
佇列 c語言實現 include include define queueisempty arg arg size 0 define queueisfull arg arg size arg capacity 判斷是否為空或為滿。巨集定義,函式調銷太大。佇列使用size和capacity顯式的判斷是...
c語言資料結構實現 鏈式佇列
鏈式佇列由環形鍊錶實現,通過煉表頭和鍊錶尾的操作,完成了隊列入列出列的功能。如圖所示,空佇列時至少需要乙個空節點,表示為佇列頭和佇列尾,相當於哨兵的作用 入列 新增節點插入到佇列尾,並更新 tail 指標 出列 更新 head 位置,釋放原來 head節點,返回現有位置的 data 相關資料結構 s...