設計你的循環隊列實現。 循環隊列是一種線性數據結構,其操做表現基於 FIFO(先進先出)原則而且隊尾被鏈接在隊首以後以造成一個循環。它也被稱爲「環形緩衝器」。
循環隊列的一個好處是咱們能夠利用這個隊列以前用過的空間。在一個普通隊列裏,一旦一個隊列滿了,咱們就不能插入下一個元素,即便在隊列前面仍有空間。可是使用循環隊列,咱們能使用這些空間去存儲新的值。
你的實現應該支持以下操做:
MyCircularQueue(k): 構造器,設置隊列長度爲 k 。
Front: 從隊首獲取元素。若是隊列爲空,返回 -1 。
Rear: 獲取隊尾元素。若是隊列爲空,返回 -1 。
enQueue(value): 向循環隊列插入一個元素。若是成功插入則返回真。
deQueue(): 從循環隊列中刪除一個元素。若是成功刪除則返回真。
isEmpty(): 檢查循環隊列是否爲空。
isFull(): 檢查循環隊列是否已滿。網絡
MyCircularQueue circularQueue = new MyCircularQueue(3); // 設置長度爲 3 circularQueue.enQueue(1); // 返回 true circularQueue.enQueue(2); // 返回 true circularQueue.enQueue(3); // 返回 true circularQueue.enQueue(4); // 返回 false,隊列已滿 circularQueue.Rear(); // 返回 3 circularQueue.isFull(); // 返回 true circularQueue.deQueue(); // 返回 true circularQueue.enQueue(4); // 返回 true circularQueue.Rear(); // 返回 4
class MyCircularQueue: def __init__(self, k: int): """ Initialize your data structure here. Set the size of the queue to be k. """ self.length = k self.queues = [] def enQueue(self, value: int) -> bool: """ Insert an element into the circular queue. Return true if the operation is successful. """ if self.isFull(): return False else: self.queues.append(value) return True def deQueue(self) -> bool: """ Delete an element from the circular queue. Return true if the operation is successful. """ if self.isEmpty(): return False else: self.queues.pop(0) return True def Front(self) -> int: """ Get the front item from the queue. """ if self.isEmpty(): return -1 else: return self.queues[0] def Rear(self) -> int: """ Get the last item from the queue. """ if self.isEmpty(): return -1 else: return self.queues[-1] def isEmpty(self) -> bool: """ Checks whether the circular queue is empty or not. """ if len(self.queues) == 0: return True else: return False def isFull(self) -> bool: """ Checks whether the circular queue is full or not. """ if len(self.queues) == self.length: return True else: return False # Your MyCircularQueue object will be instantiated and called as such: # obj = MyCircularQueue(k) # param_1 = obj.enQueue(value) # param_2 = obj.deQueue() # param_3 = obj.Front() # param_4 = obj.Rear() # param_5 = obj.isEmpty() # param_6 = obj.isFull()
來源:力扣(LeetCode)
連接:https://leetcode-cn.com/problems/design-circular-queue
著做權歸領釦網絡全部。商業轉載請聯繫官方受權,非商業轉載請註明出處。數據結構