迴圈佇列是乙個大小確定的特殊佇列,它的特殊體現在迴圈,之前提到的普通佇列,我們是用鍊錶來實現的,在這裡,由於迴圈佇列是乙個長度確定的佇列,所以我們可以拿順序表來實現。迴圈佇列的操作與普通佇列類似,不過不同的地方在於當rear走到capacity-1並且front在0號元素位置的時候,當此時再有元素入隊,則不能入隊,如果此時有元素出隊,則可以繼續入隊。如下圖
我們知道這個迴圈佇列的capacity是6,此時圖中所示表示該迴圈佇列已滿,則此時不能在入隊。講到這裡則就會有人想到,判斷迴圈佇列滿隊的時候,可以通過rear是否等於front來判斷佇列是否滿隊。這樣是不可取的比如下圖
當該隊列出隊時front和rear相遇,此時雖然它倆相等,但很明顯此時佇列不為空。所以為了便於判斷迴圈佇列是否滿隊,我們引入兩個變數,分別代表該佇列的容量capacity和當前佇列大小size。
以下是建立迴圈佇列的主體。
(這裡為了方便描述,統一用int型別表示在實際編寫中,大家可以用typedef來定義自己想要的資料型別。)
#include
#include
typedef
struct queue
cqueue;
cqueue*
cqueuecreat
(size_t k)
//迴圈佇列的初始化
bool cqueueenqueue
(cqueue* mq,
int vaule)
//入隊
bool cququedequeue
(cqueue* mq)
//出隊
intcqueuefront
(cqueue* mq)
//獲取隊頭元素
intcqueuerear
(cqueue* mq)
//獲取隊尾元素
bool cqueueisempty
(cqueue* mq)
// 判斷迴圈佇列是否為空
bool cqueueisfull
(cqueue* mq)
//判斷當前是否滿隊
void
cqueuefree
(cqueue* mq)
//迴圈佇列的銷毀
迴圈佇列的初始化在這個介面中,我們需要給這個佇列申請指定大小而定空間,並且將size以及頭尾初始化,**如下
cqueue*
cqueuecreat
(size_t capacity)
迴圈佇列的入隊
bool cqueueenqueue
(cqueue* obj,
int vaule)
迴圈佇列的出隊
bool cququedequeue
(cqueue* mq)
獲取隊頭元素
int
cqueuefront
(cqueue* mq)
獲取隊尾元素
int
cqueuerear
(cqueue* mq)
判斷佇列是否為空
bool cqueueisempty
(cqueue* mq)
判斷佇列是否滿隊
bool cqueueisfull
(cqueue* mq)
銷毀迴圈鍊錶
void
cqueuefree
(cqueue* mq)
佇列(迴圈佇列 鏈佇列)
迴圈佇列 cirqueue.h 名稱 迴圈佇列 基於陣列 templateclass cirqueue q size 1 多申請乙個位置,保證隊滿 對空容易判定!cirqueue void enter datatype data 入隊操作 datatype shift 出隊操作 datatype g...
迴圈佇列和佇列
描述 根據給定的空間構造順序迴圈佇列,規定隊滿處理方法為少用乙個元素空間。例如,給定5個元素空間構造迴圈佇列,則只能存放4個元素。試根據入隊及出隊操作判斷佇列最後的元素存放情況,並輸出最後佇列中的元素值,即完成給定入隊及出列操作後一次性全部出隊的元素值。要求採用順序佇列完成。輸入 輸入的第一行為乙個...
佇列和迴圈佇列
線性表是最基本,最簡單,最常用的一種資料結構。線性表中資料元素之間的關係是一對一的關係,即除了第乙個和最後乙個資料元素之外,其他資料元素均有唯一的前驅元素和後繼元素。線性表的特徵如下 集合中一定存在唯一的乙個 第乙個元素 集合中一定存在唯一的乙個 最後元素 除最後乙個元素外,其他元素均有唯一的後繼元...