概念:
隊(duì)列也是一種“操作受限”的線性表煤墙,體現(xiàn)在先進(jìn)先出原則
常見操作:
入隊(duì):隊(duì)列尾部放入數(shù)據(jù)
出隊(duì):隊(duì)列頭部取一個(gè)數(shù)據(jù)
常見隊(duì)列:
普通隊(duì)列:
1.?由于隊(duì)列是在兩端進(jìn)行操作叫确,需要兩個(gè)指針判耕,一個(gè)是head指針移国,指向?qū)︻^蛤育;一個(gè)是tail指針,指向隊(duì)尾
2.?入隊(duì)的就是尾指針給后移動(dòng)扶檐,出隊(duì)的時(shí)候頭指針會(huì)向后移動(dòng)
3.?使用數(shù)組實(shí)現(xiàn)的隊(duì)列就是順序隊(duì)列凶杖,使用鏈表實(shí)現(xiàn)的就是鏈?zhǔn)疥?duì)列
4.?在順序隊(duì)列中,判斷隊(duì)列的條件是tail =?n款筑,隊(duì)空的條件是head=tail
5.?在順序隊(duì)列中智蝠,當(dāng)尾指針指向數(shù)組最后一個(gè)位置時(shí),入隊(duì)操作就有問題奈梳,此時(shí)head由于出隊(duì)操作已經(jīng)后移杈湾,數(shù)組中有位置,為了利用這部分空間攘须,因此出現(xiàn)循環(huán)隊(duì)列漆撞,就是讓數(shù)組首尾相連,當(dāng)尾指針指向最后一個(gè)位置時(shí)于宙,再次從數(shù)據(jù)第一個(gè)位置開始浮驳,循環(huán)隊(duì)列判斷隊(duì)滿和隊(duì)空的條件是重點(diǎn)。
6.?實(shí)際應(yīng)用中捞魁,出現(xiàn)阻塞隊(duì)列和并發(fā)隊(duì)列
7. 阻塞隊(duì)列就是給隊(duì)列增加阻塞機(jī)制至会,入隊(duì)的時(shí)候如果隊(duì)列滿的就會(huì)阻塞等待隊(duì)列有空余位置,出隊(duì)的時(shí)候如果隊(duì)空就會(huì)阻塞隊(duì)列有數(shù)據(jù)谱俭,常應(yīng)用生產(chǎn)-消費(fèi)中
雙端隊(duì)列:
是一種具有隊(duì)列和棧的性質(zhì)的數(shù)據(jù)結(jié)構(gòu)奉件。雙端隊(duì)列中的元素可以從兩端彈出,其限定插入和刪除操作在隊(duì)列的兩端進(jìn)行昆著。在實(shí)際使用中县貌,還可以有輸出受限的雙端隊(duì)列(即一個(gè)端點(diǎn)允許插入和刪除,另一個(gè)端點(diǎn)只允許插入的雙端隊(duì)列)宣吱,輸入受限的雙端隊(duì)列(即一個(gè)端點(diǎn)允許插入和刪除窃这,另一個(gè)端點(diǎn)只允許刪除的雙端隊(duì)列)。而如果限定雙端隊(duì)列從某個(gè)端點(diǎn)插入的元素只能從該端點(diǎn)刪除征候,則該雙端隊(duì)列就蛻變?yōu)閮蓚€(gè)棧底相鄰的棧了
優(yōu)先級(jí)隊(duì)列:
1.?是0個(gè)或者多個(gè)元素的集合杭攻,每個(gè)元素都有一個(gè)優(yōu)先權(quán),對(duì)優(yōu)先級(jí)隊(duì)列執(zhí)行的操作有查找疤坝、插入一個(gè)新元素或刪除
2.?一般情況下兆解,查找操作用來搜索優(yōu)先權(quán)最大的元素,刪除操作用來刪除該元素跑揉。
3.?對(duì)于優(yōu)先權(quán)相同的元素锅睛,可按先進(jìn)先出次序處理或按任意優(yōu)先權(quán)進(jìn)行。
4.?最突出的優(yōu)先就是自動(dòng)排序历谍,本質(zhì)上是堆實(shí)現(xiàn)现拒,故入隊(duì)和出隊(duì)的效率都是log(n),因此也不是線性結(jié)構(gòu)
常考面試題
1.?使用兩個(gè)隊(duì)列實(shí)現(xiàn)一個(gè)棧
2.?BFS使用隊(duì)列
3.?滑動(dòng)窗口