資料結構基礎之迴圈佇列C語言實現

2021-07-12 01:24:31 字數 1750 閱讀 5799

/*

* 五、資料結構基礎之迴圈佇列        

* 迴圈佇列資料結構:

* 由於入隊和出隊操作中,頭指標和尾指標只會增加,導致假上溢而不能有效地利用佇列空間

* 將佇列空間想象為乙個首尾相連的圓環,以此來克服順序佇列的假上溢現象

* --- 2023年4月28日 ---by lee

*/ #ifndef _circular_queue_h

#define _circular_queue_h

#include "utility.h"

//巨集定義迴圈佇列的空間大小

#define queuesize 20

//元素型別定義

typedef int datatype;

//迴圈佇列結構的定義

typedef struct _circularqueue

circularqueue;

//對迴圈佇列(順序佇列)的基本操作

void initqueue(circularqueue* queue);//初始化,構造空隊

int isqueueempty(circularqueue* queue);//判斷隊是否為空

int isqueuefull(circularqueue* queue);//判斷隊是否為滿,僅針對順序佇列

void enqueue(circularqueue* queue, datatype x);//元素x入隊

datatype dequeue(circularqueue* queue);//出隊,返回隊首元素

datatype queuefront(circularqueue* queue);//取隊首元素

//初始化,構造空隊

void initqueue(circularqueue* queue)

//隊列為空和滿時,front都等於rear;判斷佇列是否為空或者為滿:

//1、使用計數器count

//2、少用乙個元素的空間,約定佇列滿時:(rear+1)%queuesize=front

//rear指向隊尾元素的下乙個位置,始終為空;佇列的長度為(rear-front+queuesize)%queuesize

//判斷隊是否為空

int isqueueempty(circularqueue* queue)

//判斷隊是否為滿

int isqueuefull(circularqueue* queue)

//元素x入隊

void enqueue(circularqueue* queue, datatype x)

//出隊,返回隊首元素

datatype dequeue(circularqueue* queue)

//取隊首元素

datatype queuefront(circularqueue* queue)

#endif

//測試**

/*    circularqueue q;

initqueue(&q);

enqueue(&q,1);

enqueue(&q,2);

printf("queue front: %d\n",dequeue(&q));

printf("queue front: %d\n",dequeue(&q));

enqueue(&q,1);

enqueue(&q,2);

printf("queue length: %d\n",q.count);

*/

資料結構之迴圈佇列(C語言實現)

具體程式實現如下 快取佇列長度 define cirqueue len 200 typedef unsigned char u8 typedef struct cirqueue 迴圈佇列 static cirqueue cirqueue 迴圈佇列初始化 void cqinit void 檢查佇列是否...

資料結構 C語言實現迴圈佇列

迴圈佇列可以理解為乙個環,實際上是將乙個普通佇列的尾部連上頭部構成的,所以在實現迴圈佇列時,需要兩個指標front和rear分別指示佇列頭元素及佇列尾元素的位置。在初始化建空佇列時可以令front rear 0,這樣當插入新元素時,尾指標rear加1表示向後移動一位,同理,當刪除佇列頭元素時,頭指標...

資料結構C語言實現 迴圈佇列

如下 include includetypedef char elemtype define maxqueue 100 typedef struct cyclequeue 建立乙個迴圈佇列 void initqueue cyclequeue q q front q rear 0 初始換隊首隊尾位置為...