目錄
佇列queue
佇列的實現
佇列的時間複雜度
迴圈佇列的時間複雜度
介面queue:
/**
* created by binzhang on 2019/3/17.
*/public inte***ce queue
實現類arrayqueue:
/**
* created by binzhang on 2019/3/17.
*/public class arrayqueueimplements 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()
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)的,所有的元素都要向前挪一位,效能相對是比較低的。
迴圈佇列可以解決這個問題。
迴圈佇列加入了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)的時候就表明我們的佇列是滿的了,可以進行擴容了,也就是說迴圈佇列中總會是浪費乙個空間的。
手寫乙個迴圈佇列:
/**
* created by binzhang on 2019/3/17.
*/public class loopqueueimplements queue
public loopqueue()
public int getcapacity()
@override
public int getsize()
@override
public boolean isempty()
@override
public void enqueue(e e)
private void resize(int newcapacity)
@override
public e dequeue()
@override
public e getfront()
@override
public string tostring()
return res.tostring();
}public static void main(string args) }}
}
輸出:
queue: size = 1, capacity = 10
front [0] tail
queue: size = 2, capacity = 10
front [0, 1] tail
queue: size = 3, capacity = 10
front [0, 1, 2] tail
queue: size = 2, capacity = 5
front [1, 2] tail
queue: size = 3, capacity = 5
front [1, 2, 3] tail
queue: size = 4, capacity = 5
front [1, 2, 3, 4] tail
queue: size = 5, capacity = 5
front [1, 2, 3, 4, 5] tail
queue: size = 4, capacity = 5
front [2, 3, 4, 5] tail
queue: size = 5, capacity = 5
front [2, 3, 4, 5, 6] tail
queue: size = 6, capacity = 10
front [2, 3, 4, 5, 6, 7] tail
queue: size = 7, capacity = 10
front [2, 3, 4, 5, 6, 7, 8] tail
queue: size = 6, capacity = 10
front [3, 4, 5, 6, 7, 8] tail
queue: size = 7, capacity = 10
front [3, 4, 5, 6, 7, 8, 9] tail
迴圈佇列出列的時間複雜度變為o(1)loopqueue
資料結構之佇列詳解
介面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 ...
資料結構之迴圈佇列詳解
佇列是一種運算受限的線性表。所謂的運算受限主要是指插入操作限定在表的某一端 隊尾 進行,刪除操作限定在表的另一端 對頭 進行。佇列通常也被稱為先進先出 fifo 的線性表。佇列通常有兩種儲存結構,即順序儲存結構和鏈式儲存結構。順序儲存結構的佇列通常稱為順序佇列。注意 queue max size表示...
資料結構之佇列
八 佇列 鏈式佇列 鍊錶實現 隊尾 rear 隊首 front 靜態佇列 陣列實現 必須是迴圈佇列 需要幾個引數來確定,各引數含義 1 佇列初始化 front和rear值都是0 2 佇列非空 front代表佇列第乙個元素 rear代表佇列最後乙個元素的 下乙個元素 3 佇列空 front和rear相...