佇列 迴圈佇列

2021-10-05 05:27:56 字數 2389 閱讀 9571

迴圈佇列是乙個大小確定的特殊佇列,它的特殊體現在迴圈,之前提到的普通佇列,我們是用鍊錶來實現的,在這裡,由於迴圈佇列是乙個長度確定的佇列,所以我們可以拿順序表來實現。迴圈佇列的操作與普通佇列類似,不過不同的地方在於當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個元素。試根據入隊及出隊操作判斷佇列最後的元素存放情況,並輸出最後佇列中的元素值,即完成給定入隊及出列操作後一次性全部出隊的元素值。要求採用順序佇列完成。輸入 輸入的第一行為乙個...

佇列和迴圈佇列

線性表是最基本,最簡單,最常用的一種資料結構。線性表中資料元素之間的關係是一對一的關係,即除了第乙個和最後乙個資料元素之外,其他資料元素均有唯一的前驅元素和後繼元素。線性表的特徵如下 集合中一定存在唯一的乙個 第乙個元素 集合中一定存在唯一的乙個 最後元素 除最後乙個元素外,其他元素均有唯一的後繼元...