佇列,和棧
一樣,也是一種對資料的"存"和"取"有嚴格要求的線性儲存結構。
與棧結構不同的是,佇列的兩端都"開口",要求資料只能從一端進,從另一端出
通常,稱進資料的一端為 "隊尾",出資料的一端為 "隊頭",資料元素進佇列的過程稱為 "入隊",出佇列的過程稱為 "出隊"。
不僅如此,佇列中資料的進出要遵循 "先進先出" 的原則,即最先進佇列的資料元素,同樣要最先出佇列。拿圖 1 中的佇列來說,從資料在佇列中的儲存狀態可以分析出,元素 1 最先進隊,其次是元素 2,最後是元素 3。此時如果將元素 3 出隊,根據佇列 "先進先出" 的特點,元素 1 要先出佇列,元素 2 再出佇列,最後才輪到元素 3 出佇列。
棧和佇列不要混淆,棧結構是一端封口,特點是"先進後出";而佇列的兩端全是開口,特點是"先進先出"。因此,資料從表的一端進,從另一端出,且遵循 "先進先出" 原則的線性儲存結構就是佇列。
佇列儲存結構的實現有以下兩種方式:
順序佇列:在順序表的基礎上實現的佇列結構;
鏈佇列:在鍊錶的基礎上實現的佇列結構;
兩者的區別僅是順序表和煉表的區別,即在實際的物理空間中,資料集中儲存的佇列是順序佇列,分散儲存的佇列是鏈佇列。
由於順序佇列的底層使用的是陣列,因此需預先申請一塊足夠大的記憶體空間初始化順序佇列。除此之外,為了滿足順序佇列中資料從隊尾進,隊頭出且先進先出的要求,我們還需要定義兩個指標(top 和 rear)分別用於指向順序佇列中的隊頭元素和隊尾元素
由於順序佇列初始狀態沒有儲存任何元素,因此 top 指標和 rear 指標重合,且由於順序佇列底層實現靠的是陣列,因此 top 和 rear 實際上是兩個變數,它的值分別是隊頭元素和隊尾元素所在陣列位置的下標。
當有資料元素進佇列時,對應的實現操作是將其儲存在指標 rear 指向的陣列位置,然後 rear+1;當需要隊頭元素出隊時,僅需做 top+1 操作。
用順序佇列儲存的實現操作
順序佇列中資料出佇列的實現過程
此方法存在的問題
我們希望的是當 rear和top相等的時候就說隊列為空。可是通過資料全部出隊後的示意圖。會發現,指標 top 和 rear 重合位置指向了 a[4] 而不再是 a[0]。也就是說,整個順序佇列在資料不斷地進隊出隊過程中,在順序表中的位置不斷後移。
順序佇列整體後移造成的影響是:
既然明白了上面這種方法的弊端,那麼我們可以試著在它的基礎上對其改良。
為了解決以上兩個問題,可以使用巧妙的方法將順序表打造成乙個環狀表
top和rear相等時說明隊列為空。(rear+1)% 陣列長度 == top時說明隊滿比如上面這個當rear在a[5]時說明隊滿。會有乙個空間浪費
j**a實現迴圈佇列
1package
com.qiaorui;23
public
class loopqueue
1213
public
loopqueue()
1617
public
intgetcapacity()
2021
public
boolean
isempty()
2425
public
void
enqueue(e e)
29 data[rear] =e;
30 rear = (rear + 1) %data.length;31}
3233
public
e dequeue()
4344
public
e getfront()
4950
private
void resize(int
newcapacity)
6263
public
string tostring() 74}
76return
res.tostring();77}
7879
public
static
void
main(string args) 90}
91}9293 }
力扣 933題對佇列的簡單介紹
佇列的定義 佇列是只允許在一端進行插入操作,另一端進行刪除操作的線性表。佇列是一種 先進先出 的線性表,簡稱fifo。允許插入的一端是隊尾,允許刪除的一端是隊頭。1.迴圈佇列 順序儲存 底層還是用陣列來實現,但是需要兩個指標,乙個是隊頭指標,乙個是隊尾指標,當隊頭和隊尾指向同乙個位置時,表示當前的佇...
佇列的定義和簡單使用
佇列 queue 其實也是線性結構,但只是在操作上有點不一樣,佇列的特點,先進先出 fifo 所以他也有不同的應用,生活當中佇列的例子有很多,比如排隊啊,很多問題都是可以用佇列來解決,下面來說說佇列的定義和佇列上面的相關操作,1.定義佇列的節點 include include define maxs...
Hystrix的介紹和簡單使用
這週在看專案的相關 時,接觸到了hystrix,因此查詢了相關資料學習了下。一 什麼是hystrix hystrix是netflix針對微服務分布式系統的熔斷保護中介軟體,當我們的客戶端連線遠端的微服務時,有兩種情況需要考慮 首先,如果遠端系統當機了我們怎麼辦?其次,我們如何管理對遠端微服務的呼叫效...