資料結構之佇列詳解

2021-09-12 18:51:55 字數 4166 閱讀 4057

介面queue:

/

*** created by binzhang on 2019/3

/17.*

/public inte***ce queue

實現類arrayqueue:

/

*** created by binzhang on 2019/3

/17.*

/public class

arrayqueue

implements queue

public arrayqueue(

) @override

public int getsize(

) @override

public boolean isempty(

) public int getcapacity(

) @override

public void enqueue(e e)

@override

public e dequeue(

) @override

public e getfront(

) @override

public string tostring(

)"] tail");

return res.tostring();

} public static void main(string[

] args)}}

}

main方法執行結果:

queue:[0

] tail

queue:[0

,1] tail

queue:[0

,1,2

] tail

queue:[1

,2] tail

queue:[1

,2,3

] tail

queue:[1

,2,3

,4] tail

queue:[1

,2,3

,4,5

] tail

queue:[2

,3,4

,5] tail

queue:[2

,3,4

,5,6

] tail

queue:[2

,3,4

,5,6

,7] tail

queue:[2

,3,4

,5,6

,7,8

] tail

queue:[3

,4,5

,6,7

,8] tail

queue:[3

,4,5

,6,7

,8,9

] tail

arrayqueue

可以看到陣列出列的時間複雜度是o(n)的,所有的元素都要向前挪一位,效能相對是比較低的。

迴圈佇列可以解決這個問題。

迴圈佇列加入了fronttail兩個屬性。

front==tail時隊列為空。

每次入隊的時候tail都會向後移動乙個單位,當有出隊操作時,front也會向後移動乙個單位。

當資料插入到位置7後,tail會回到0位置。

那麼tail是怎麼回到0的呢,當我們插入的元素大於佇列長度時採用取餘的方式來計算

tail = (i + 1)/capacity

這裡就是(7+1)/8(8為陣列長度)就回到了我們索引為0的位置

注意我們之前定義了front==tail是隊列為空的標誌,索引當遇到下圖情況即tail+1==front(更準確的說是(tail + 1) % c == front)的時候就表明我們的佇列是滿的了,可以進行擴容了,也就是說迴圈佇列中總會是浪費乙個空間的。

}輸出:

queue: size =

1, capacity =

10front [

0] tail

queue: size =

2, capacity =

10front [0,

1] tail

queue: size =

3, capacity =

10front [0,

1,2] tail

queue: size =

2, capacity =

5front [1,

2] tail

queue: size =

3, capacity =

5front [1,

2,3] tail

queue: size =

4, capacity =

5front [1,

2,3,

4] tail

queue: size =

5, capacity =

5front [1,

2,3,

4,5] tail

queue: size =

4, capacity =

5front [2,

3,4,

5] tail

queue: size =

5, capacity =

5front [2,

3,4,

5,6] tail

queue: size =

6, capacity =

10front [2,

3,4,

5,6,

7] tail

queue: size =

7, capacity =

10front [2,

3,4,

5,6,

7,8] tail

queue: size =

6, capacity =

10front [3,

4,5,

6,7,

8] tail

queue: size =

7, capacity =

10front [3,

4,5,

6,7,

8,9] tail

迴圈佇列出列的時間複雜度變為o(1)

loopqueu

資料結構之佇列詳解

目錄 佇列queue 佇列的實現 佇列的時間複雜度 迴圈佇列的時間複雜度 介面queue created by binzhang on 2019 3 17.public inte ce queue 實現類arrayqueue created by binzhang on 2019 3 17.publ...

資料結構之迴圈佇列詳解

佇列是一種運算受限的線性表。所謂的運算受限主要是指插入操作限定在表的某一端 隊尾 進行,刪除操作限定在表的另一端 對頭 進行。佇列通常也被稱為先進先出 fifo 的線性表。佇列通常有兩種儲存結構,即順序儲存結構和鏈式儲存結構。順序儲存結構的佇列通常稱為順序佇列。注意 queue max size表示...

資料結構之佇列

八 佇列 鏈式佇列 鍊錶實現 隊尾 rear 隊首 front 靜態佇列 陣列實現 必須是迴圈佇列 需要幾個引數來確定,各引數含義 1 佇列初始化 front和rear值都是0 2 佇列非空 front代表佇列第乙個元素 rear代表佇列最後乙個元素的 下乙個元素 3 佇列空 front和rear相...