佇列的介紹和簡單使用(二)

2022-09-13 08:18:09 字數 2676 閱讀 7205

佇列,和棧

一樣,也是一種對資料的"存"和"取"有嚴格要求的線性儲存結構。

與棧結構不同的是,佇列的兩端都"開口",要求資料只能從一端進,從另一端出

通常,稱進資料的一端為 "隊尾",出資料的一端為 "隊頭",資料元素進佇列的過程稱為 "入隊",出佇列的過程稱為 "出隊"。

不僅如此,佇列中資料的進出要遵循 "先進先出" 的原則,即最先進佇列的資料元素,同樣要最先出佇列。拿圖 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實現迴圈佇列

1

package

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針對微服務分布式系統的熔斷保護中介軟體,當我們的客戶端連線遠端的微服務時,有兩種情況需要考慮 首先,如果遠端系統當機了我們怎麼辦?其次,我們如何管理對遠端微服務的呼叫效...