信息學(xué)奧賽系列教程:循環(huán)隊列

循環(huán)隊列:

上一次介紹了隊列的基本概念溪王、性質(zhì)和操作腮鞍,本次介紹循環(huán)隊列。

用一個數(shù)組在扰,加分別指向隊首缕减,隊尾的指針,實現(xiàn)循環(huán)隊列芒珠。

初始時:隊首和隊尾指向相同


元素入隊時桥狡,入隊一個元素尾指針+1


元素入隊時,入隊一個元素尾指針+1


當(dāng)尾指針指向數(shù)組最后一個元素皱卓,頭指針未指向第一個元素時裹芝,實際上前面還有空的空間可以存儲元素,稱為“假溢出”


此時娜汁,可以將頭指針指向前面空的元素嫂易,繼續(xù)存儲,這樣就實現(xiàn)了數(shù)組空間的循環(huán)利用掐禁。


如上圖怜械,當(dāng)1位置也存儲了元素后,隊列不能再存儲元素傅事,頭指針和尾指針指向相同的位置缕允,這樣就和隊列空的判斷條件一樣,無法判斷是隊列滿還是隊列空蹭越,如下圖所示:


一般情況下障本,采取少存一個元素,來區(qū)別隊列滿還是空响鹃。另外一種方式驾霜,在程序中置一個標(biāo)志位,用標(biāo)志位來區(qū)別隊列滿和空的狀態(tài)买置。

? ? ? 由上面的分析得知粪糙,循環(huán)隊列元素出隊和入隊時,頭指針和尾指針都加1忿项。

循環(huán)隊列的基本操作:

1猜旬、判斷隊列空 ?head == tail?

2、入隊位置計算 tail=(tail+1)% N? N表示數(shù)組元素的長度

3倦卖、出隊位置計算 head=(head+1)% N

4、判斷隊列滿 ?(tail+1) % N =tail

5椿争、求隊列長度 (tail-head+N) % N

? ? ? 出隊和入隊位置計算為以及求隊列長度為什么都%N怕膛?當(dāng)head和tail為7時,加1%N=0秦踪,就是第一個元素褐捻,tail-head<0也需要+N%N保證位置為正掸茅。

循環(huán)隊列的C++代碼實現(xiàn):

#include <iostream>

using namespace std;

const int N=6;? //隊列長度

int a[N];? ? ? //隊列數(shù)組

int head;? //頭指針的位置

int tail;? //尾指針的位置

void init();? //初始化

void add(int x); //隊列入隊

int out();? ? ? //隊列出隊

bool iffull();? //判斷隊列滿

bool ifempty();? //判斷隊列為空

int alen();? ? ? //求當(dāng)前隊列的長度

int main()

{

init();

add(11);

add(12);

add(13);

cout<<out()<<endl;

cout<<out()<<endl;

cout<<out()<<endl;

cout<<out()<<endl;

return 0;

}

int alen()

{

return (tail - head +N) % N;

}

bool ifempty()

{

return head == tail;

}

bool iffull()

{

return? (tail+1) % N == front;

}

int out()

{

if (ifempty())

{

cout<<"隊列已空,不能出隊"<<endl;

return 0;

}

int x = a[head];

head = (head+1) % N;

return x;

}

void add(int x)

{

if (iffull())

{

cout<<"隊列已滿柠逞,不能加入"<<endl;

return ;

}

a[tail] = x;

tail = (tail+1) % N;

}

void init()

{

? head =0;

? tail =0;

}

? 信息學(xué)奧賽循環(huán)隊列相關(guān)題目:

1昧狮、設(shè)循環(huán)隊列中數(shù)組的下標(biāo)范圍是l-n,其頭指針和尾指針分別為f和r,則其元素個數(shù)為()

A.r-f板壮, ?B.r-f+1 ?C.(r-f) % n+1 ?D.(r-f+n)% n

2逗鸣、若用一個大小為6的數(shù)組來實現(xiàn)循環(huán)隊列,且當(dāng)rear和front的值分別為0和3绰精,則當(dāng)隊列刪除一個元素撒璧,再加兩個元素后,rear和front的值分別是() ?

?A.1和5 B.2和4 C.4和2 D.5和1

3笨使、循環(huán)隊列中rear和font的值是15和32卿樱,隊列長度是60,則隊列中的元素有()?

?A.42 ?B.16 C.17 D 43

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末硫椰,一起剝皮案震驚了整個濱河市繁调,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌靶草,老刑警劉巖蹄胰,帶你破解...
    沈念sama閱讀 217,734評論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異爱致,居然都是意外死亡烤送,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,931評論 3 394
  • 文/潘曉璐 我一進(jìn)店門糠悯,熙熙樓的掌柜王于貴愁眉苦臉地迎上來帮坚,“玉大人,你說我怎么就攤上這事互艾∈院停” “怎么了?”我有些...
    開封第一講書人閱讀 164,133評論 0 354
  • 文/不壞的土叔 我叫張陵纫普,是天一觀的道長阅悍。 經(jīng)常有香客問我,道長昨稼,這世上最難降的妖魔是什么节视? 我笑而不...
    開封第一講書人閱讀 58,532評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮假栓,結(jié)果婚禮上寻行,老公的妹妹穿的比我還像新娘。我一直安慰自己匾荆,他們只是感情好拌蜘,可當(dāng)我...
    茶點故事閱讀 67,585評論 6 392
  • 文/花漫 我一把揭開白布杆烁。 她就那樣靜靜地躺著,像睡著了一般简卧。 火紅的嫁衣襯著肌膚如雪兔魂。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,462評論 1 302
  • 那天举娩,我揣著相機(jī)與錄音析校,去河邊找鬼。 笑死晓铆,一個胖子當(dāng)著我的面吹牛勺良,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播骄噪,決...
    沈念sama閱讀 40,262評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼尚困,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了链蕊?” 一聲冷哼從身側(cè)響起事甜,我...
    開封第一講書人閱讀 39,153評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎滔韵,沒想到半個月后逻谦,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,587評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡陪蜻,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,792評論 3 336
  • 正文 我和宋清朗相戀三年邦马,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片宴卖。...
    茶點故事閱讀 39,919評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡滋将,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出症昏,到底是詐尸還是另有隱情随闽,我是刑警寧澤,帶...
    沈念sama閱讀 35,635評論 5 345
  • 正文 年R本政府宣布肝谭,位于F島的核電站掘宪,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏攘烛。R本人自食惡果不足惜魏滚,卻給世界環(huán)境...
    茶點故事閱讀 41,237評論 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望坟漱。 院中可真熱鬧栏赴,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,855評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽沟突。三九已至花颗,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間惠拭,已是汗流浹背扩劝。 一陣腳步聲響...
    開封第一講書人閱讀 32,983評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留职辅,地道東北人棒呛。 一個月前我還...
    沈念sama閱讀 48,048評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像域携,于是被迫代替她去往敵國和親簇秒。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,864評論 2 354

推薦閱讀更多精彩內(nèi)容