我們知道隊列這種數(shù)據(jù)結(jié)構(gòu)的物理實現(xiàn)方式主要還是兩種,一種是鏈隊列(自定義節(jié)點類),另一種則是使用數(shù)組實現(xiàn),兩者各有優(yōu)勢。此處我們將要介紹的循環(huán)隊列其實是隊列的一種具體實現(xiàn),由于一般的數(shù)組實現(xiàn)的隊列結(jié)構(gòu)在頻繁出隊的情況下,會產(chǎn)生假溢出現(xiàn)象,導(dǎo)致數(shù)組使用效率降低,所以引入循環(huán)隊列這種結(jié)構(gòu)。本文將從以下兩個大角度介紹循環(huán)隊列這種數(shù)據(jù)結(jié)構(gòu):
循環(huán)數(shù)組實現(xiàn)循環(huán)隊列
Java中具體實現(xiàn)容器類ArrayDeque
一、循環(huán)隊列
為了深刻體會到循環(huán)隊列這個結(jié)構(gòu)優(yōu)于非循環(huán)隊列的地方,我們將首先介紹數(shù)組實現(xiàn)的非循環(huán)隊列結(jié)構(gòu)。隊列這種數(shù)據(jù)結(jié)構(gòu),無論你是用鏈表實現(xiàn),還是用數(shù)組實現(xiàn),它都是要有兩個指針分別指向隊頭和隊尾。在我們數(shù)組的實現(xiàn)方式中,用兩個int型變量用于記錄隊頭和隊尾的索引。
一個隊列的初始狀態(tài),head和tail都指向初始位置(索引為0處)。head永遠指向該隊列的隊頭元素,tail則指向該隊列最后一個元素的下一位置,當有入隊操作時: