資料結構 佇列的定義及實現(c語言)

2021-10-02 12:51:21 字數 3416 閱讀 5664

佇列是一種特殊的線性表,特殊之處在於它只允許在表的前端(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...