介面queue:
實現類arrayqueue:/
*** created by binzhang on 2019/3
/17.*
/public inte***ce queue
main方法執行結果:/
*** 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)}}
}
arrayqueuequeue:[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
可以看到陣列出列的時間複雜度是o(n)的,所有的元素都要向前挪一位,效能相對是比較低的。
迴圈佇列可以解決這個問題。
迴圈佇列加入了front
和tail
兩個屬性。
當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相...