迴圈佇列存在乙個問題:隊頭=隊尾時,佇列的情況可能為空也可能為滿。決絕問題的方法為重新定義佇列的滿和空:頭和尾之間始終空出乙個不用的資料空間,隊列為空的時候,頭在尾前乙個位置,滿的時候頭尾之間相差乙個空的資料,即頭在尾部前兩個位置。
/*************************************
* 檔名:circlequeue.c
* 檔案描述:實現迴圈佇列模型
* 修改日期:2018-2-1
*************************************/
#include
#define queue_len (10+1)
// 其中乙個是不使用的
/* 佇列模型函式 */
void
inqueue
(int data)
;// 入隊
intoutqueue
(void);
// 出隊
intisemptyqueue
(void);
// 隊空
intisfullqueue
(void);
// 隊滿
static
int queue[queue_len]
;// 佇列長度
int head =0;
// 隊頭
int tail =-1
;// 隊尾
intmain
(void
)/* 獲取並檢查輸入 */
ret =
scanf
("%d"
,&num);if
(ret !=1)
inqueue
(num)
;// 入隊資料
}/* 出隊三個數 */
for(i =
0; i <
3; i++)}
/* 再次入隊三個 */
for(i =
0; i <
3; i++)}
/* 把剩餘沒有出隊的數出隊來檢查是否為迴圈佇列 */
while(!
isemptyqueue()
)return0;
}/**
* 函式名:inqueue
* 函式功能:把資料入隊
* 引數:data: 需要入隊的資料
* 返回值:void
*/void
inqueue
(int data)
/** * 函式名:outqueue
* 函式功能:把資料出隊
* 引數:void
* 返回值:隊頭的資料
*/int
outqueue
(void
)/**
* 函式名:isemptyqueue
* 函式功能:判斷佇列是否為空
* 引數:void
* 返回值:隊列為空返回1,不為空返回0
*/int
isemptyqueue
(void
)/**
* 函式名:isfullqueue
* 函式功能:判斷佇列是否為滿
* 引數:void
* 返回值:隊列為滿返回1,不為滿返回0
*/int
isfullqueue
(void
)
C 迴圈佇列實現模型
前段時間在知乎上看到這樣乙個小題目 用基本型別實現一佇列,佇列要求size是預先定義好的的。而且要求不可以使用語言自帶的api,如c 的stl。普通的實現很簡單,但是現在要求要盡可能的時間和空間複雜度的優化,要和語言自帶的api比較時間和空間。這個佇列還要支援如下的操作 constructor 初始...
佇列 迴圈佇列
迴圈佇列是乙個大小確定的特殊佇列,它的特殊體現在迴圈,之前提到的普通佇列,我們是用鍊錶來實現的,在這裡,由於迴圈佇列是乙個長度確定的佇列,所以我們可以拿順序表來實現。迴圈佇列的操作與普通佇列類似,不過不同的地方在於當rear走到capacity 1並且front在0號元素位置的時候,當此時再有元素入...
迴圈佇列 622 設計迴圈佇列
設計你的迴圈佇列實現。迴圈佇列是一種線性資料結構,其操作表現基於fifo 先進先出 原則並且隊尾被連線在隊首之後以形成乙個迴圈。它也被稱為環形緩衝器。迴圈佇列的乙個好處是我們可以利用這個佇列之前用過的空間。在乙個普通佇列裡,一旦乙個佇列滿了,我們就不能插入下乙個元素,即使在佇列前面仍有空間。但是使用...