佇列是只允許在一端進行插入資料操作,在另一端進行刪除資料操作的特殊線性表,佇列具有先進先出
fifo(first in first out)
入佇列:進行插入操作的一端稱為隊尾
出佇列:進行刪除操作的一端稱為隊頭
佇列可以陣列和鍊錶的結構實現,使用鍊錶的結構實現好一些,因為如果使用陣列的結構,出佇列在陣列頭上出資料,效率會比較低
此處我們使用鍊錶實現乙個支援動態增長的棧
#include
#include
#include
typedef int datatype;
typedef struct queuenode
queuenode;
typedef struct queue
queue;
void
queueinit
(queue* q)
;//初始化
void
queuedestroy
(queue* q)
;//銷毀
void
queuepush
(queue* q, datatype x)
;//插入
void
queuepop
(queue* q)
;//刪除
datatype queuefront
(queue* q)
;//返回隊頭元素
datatype queueback
(queue* q)
;//返回隊尾元素
int queueempty
(queue* q)
;//判空
int queuesize
(queue* q)
;//計算長度
void
queueprint
(queue* q)
;//輸出
#include "queue.h"
//佇列
void
queueinit
(queue* q)
//初始化
void
queuedestroy
(queue* q)
//銷毀
q->_front = q-
>_rear =
null;}
void
queuepush
(queue* q, datatype x)
//插入
else
}void
queuepop
(queue* q)
//刪除
}datatype queuefront
(queue* q)
//返回隊頭元素
datatype queueback
(queue* q)
//返回隊尾元素
int queueempty
(queue* q)
//判空
int queuesize
(queue* q)
//計算長度
return n;
}void
queueprint
(queue* q)
//輸出
printf
("\n");
}void
test()
int main()
迴圈佇列是一種線性資料結構,其操作表現基於先進先出原則,並且隊尾被連線在隊首之後以形成乙個迴圈,即環形緩衝器
迴圈佇列的關鍵在於模擬迴圈,處理陣列邊界
typedef struct mycircularqueue;
mycircularqueue*
mycircularqueuecreate
(int k)
//設定隊長k
bool mycircularqueueisempty
(mycircularqueue* obj)
//判空
return
false;}
bool mycircularqueueisfull
(mycircularqueue* obj)
//判滿
return
false;}
bool mycircularqueueenqueue
(mycircularqueue* obj, int value)
//插入
obj -
> data[obj -
> tail]
= value;
//first in
obj -
> tail =
(obj -
> tail +1)
%(obj -
> cap)
;//索引 + 1,並且要注意取模計算,實現迴圈佇列
return
true;}
bool mycircularqueuedequeue
(mycircularqueue* obj)
//刪除
obj -
> head =
(obj -
> head +1)
%(obj -
> cap)
;return
true;}
int mycircularqueuefront
(mycircularqueue* obj)
// 從隊首獲取元素
else
}int mycircularqueuerear
(mycircularqueue* obj)
// 從隊尾獲取元素
return obj -
> data[
(obj-
> tail -
1+ obj -
> cap)
%(obj -
> cap)];
//注意處理
}void
mycircularqueuefree
(mycircularqueue* obj)
//銷毀
佇列的操作與實現 迴圈佇列
由於順序佇列有 假溢位 的缺點,所以在應用中,運用更多的是迴圈佇列來實現佇列的順序儲存。由於引用傳引數,所以原始檔需要.cpp字尾,即c 檔案儲存。迴圈佇列的判空條件為 q.rear q.fornt 迴圈佇列的判讀隊滿的條件是 q.rear 1 maxsize q.fornt 下面是佇列實現的儲存型...
佇列 迴圈佇列的實現
為了可以重新利用佇列底層陣列中已刪除元素所佔的空間,消除可能出現的 假滿 現象,將順序佇列改進為迴圈佇列。迴圈佇列是首尾相連的佇列 當front rear變數達到底層陣列的capacity 1之後,再向前以為就變成0.入隊 1 判斷佇列是否已滿,已滿丟擲越界異常 2 不滿的話把元素查到隊尾,並且re...
迴圈佇列 622 設計迴圈佇列
設計你的迴圈佇列實現。迴圈佇列是一種線性資料結構,其操作表現基於fifo 先進先出 原則並且隊尾被連線在隊首之後以形成乙個迴圈。它也被稱為環形緩衝器。迴圈佇列的乙個好處是我們可以利用這個佇列之前用過的空間。在乙個普通佇列裡,一旦乙個佇列滿了,我們就不能插入下乙個元素,即使在佇列前面仍有空間。但是使用...