數(shù)據(jù)結(jié)構(gòu)-5.隊(duì)列-順序隊(duì)列

1. 隊(duì)列是一個(gè)有序列表,可以用數(shù)組(順序存儲)或鏈表來實(shí)現(xiàn)(鏈?zhǔn)酱鎯Γ?/p>

2. 遵循先入先出的原則,即先存入隊(duì)列的數(shù)據(jù),要先被取出,后存入隊(duì)列的數(shù)據(jù)要后取出

front 是隊(duì)列首的指針,rear 是隊(duì)列尾的指針,紅色部分表示加入的元素

第二幅圖中,隨著元素的加入,尾指針依次向后移動(dòng),首指針不動(dòng)

第三幅圖中,隨著元素的取出,尾指針不動(dòng),首指針向后移動(dòng)

3. 使用數(shù)組來模擬隊(duì)列

用 maxSize 來表示隊(duì)列的最大容量

使用 front 和 rear 來記錄隊(duì)列前后端的下標(biāo),front 隨著數(shù)據(jù)輸出而改變,rear 隨著數(shù)據(jù)輸入而改變

代碼實(shí)現(xiàn):

創(chuàng)建一個(gè)類
提供構(gòu)造方法,用數(shù)組創(chuàng)建隊(duì)列
判斷隊(duì)列是否已經(jīng)滿了
判斷隊(duì)列是否是空的
將數(shù)據(jù)加入隊(duì)列,如果隊(duì)列已經(jīng)滿了,添加失敗,如果有空位,通過 rear 尾部指針來添加數(shù)據(jù)
從隊(duì)列中得到數(shù)據(jù),如果隊(duì)列是空的,拋出異常,并終止該段代碼
顯示隊(duì)列中的數(shù)據(jù),注釋部分位顯示所有的數(shù)據(jù),沒有添加數(shù)據(jù)的部分會(huì)顯示 0
顯示當(dāng)前隊(duì)列首部的數(shù)據(jù),如果隊(duì)列是空的,拋出異常
驗(yàn)證一下可用性

(1)雖然已經(jīng)完成,但存在一個(gè)重要的問題,即當(dāng)前數(shù)組如果被裝滿,即使取出數(shù)據(jù),也無法再次向其中添加新數(shù)據(jù),數(shù)組中的每個(gè)空間只能使用一次,沒有復(fù)用性,這個(gè)問題也叫順序隊(duì)列的“假溢出”問題

(2)可以使用取模算法來將其改造成環(huán)形隊(duì)列,即當(dāng)前隊(duì)列滿了之后,取出數(shù)據(jù),首部向后移,再向尾部添加數(shù)據(jù)時(shí),會(huì)添加到原來的首部,整個(gè)隊(duì)列構(gòu)成了一個(gè)類似環(huán)的結(jié)構(gòu)

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容