设计你的循环队列实现。 循环队列是一种线性数据结构,其操做表现基于 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
著做权归领扣网络全部。商业转载请联系官方受权,非商业转载请注明出处。数据结构