迴圈佇列模型

2021-08-17 18:59:16 字數 1719 閱讀 9800

迴圈佇列存在乙個問題:隊頭=隊尾時,佇列的情況可能為空也可能為滿。決絕問題的方法為重新定義佇列的滿和空:頭和尾之間始終空出乙個不用的資料空間,隊列為的時候,頭在尾前乙個位置,滿的時候頭尾之間相差乙個空的資料,即頭在尾部前兩個位置。

/*************************************

* 檔名: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 先進先出 原則並且隊尾被連線在隊首之後以形成乙個迴圈。它也被稱為環形緩衝器。迴圈佇列的乙個好處是我們可以利用這個佇列之前用過的空間。在乙個普通佇列裡,一旦乙個佇列滿了,我們就不能插入下乙個元素,即使在佇列前面仍有空間。但是使用...