什麼是Circular Queue?
Circular Queue和普通Queue的差異是什麼?
如何實現一個Circular Queue?
Circular Queue在什麼場景中使用比較合適?
如何保證Circular Queue的正確性和性能?
Circular Queue 是一種在介面上很像 Queue 的資料結構,但與一般的 Queue 不同的是,它允許在 Queue 的尾端插入元素,同時在 Queue 的頭端也同時可以移除元素,因此當 Queue 已塞滿元素時,它能夠 “循環 (circular)” 回到 Queue 的初始位置重新插入元素。
使用 Circular Queue 的優點是,當我們使用陣列來實現 Circular Queue 時,可以使用頭指標與尾指標來維護 Queue 的運行。同時,因為每當尾指標到達數組的尾端時,它都會重新回到陣列的起點,因此能夠節省空間的浪費。
舉例來說,如果我們有一個大小為 5 的 Circular Queue,它的運作方式可能如下:
因此,從上面的例子中,我們可以看到,head 與 tail 指標就像一個圈一樣,當它們到達數組的尾端時,就會回到數組的頭部重新開始。這樣就能夠支持 Queue 的循環運行了。
循環性: Circular Queue是一種循環型資料結構,即當佇列頭到達佇列尾部時,會返回佇列頭部開始循環。
優點: Circular Queue具有比普通Queue更高的效率,因為它可以利用佇列未使用的空間去存儲更多的元素。
結構: Circular Queue有一個陣列buffer,在這個陣列中存儲元素,有一個front指針指向佇列頭,有一個rear指針指向佇列尾。
操作: Circular Queue常用操作包括入佇列(enqueue)、出佇列(dequeue)、查看佇列頭部元素(peek)、查看佇列是否為空(isEmpty)、查看佇列是否已滿(isFull)。
注意事項: 當復位front和rear指針時,必須確定佇列已經为空,否則有可能造成資料遺失或存儲佇列溢出。
1.實現一個環形隊列,支持以下操作:
2.判斷一個給定的整數陣列nums能否通過環形旋轉得到另一個整數陣列circ。其中,環形旋轉表示把陣列最後一個元素放到最前面,其他元素向後移一位。
eg:
nums = [1, 2, 3, 4, 5]
circ = [4, 5, 1, 2, 3]
return True
3.設計一個支持環形緩存的線性LruCache。緩存有容量大小限制,當緩存滿了時,需要將最久未使用的元素移除。
eg:
cache = LruCache(3)
cache.set(1,1)
cache.set(2,2)
cache.set(3,3)
cache.get(1) # returns 1
cache.set(4,4)
cache.get(2) # returns -1
4.設計一個日期隊列,實現以下功能:
5.實現一個環形隊列,支持環形迭代器。即可以從隊首迭代到隊尾,然後再從隊首開始迭代。