Python中如何实现循环双端队列
实现循环双端队列需要满足以下几个要点:
- 使用数组保存数据;
- 维护队头指针front和队尾指针rear;
- 队列为空时,front和rear应该指向同一位置;
- 在队列满时,需要进行扩容或缩容操作;
- 在插入和删除元素时,需要判断队列是否为空或已满。
下面是一个Python实现的循环双端队列代码示例:
class CircularDeque: def __init__(self, k: int): self.k = k # 队列的容量 self.q = [0] * k # 使用数组存储数据 self.front = 0 # 队头指针 self.rear = 0 # 队尾指针 def insertFront(self, value: int) -> bool: # 插入元素到队头 if self.isFull(): return False self.front = (self.front - 1 + self.k) % self.k # 改变队头指针 self.q[self.front] = value return True def insertLast(self, value: int) -> bool: # 插入元素到队尾 if self.isFull(): return False self.q[self.rear] = value self.rear = (self.rear + 1) % self.k # 改变队尾指针 return True def deleteFront(self) -> bool: # 删除队头元素 if self.isEmpty(): return False self.front = (self.front + 1) % self.k return True def deleteLast(self) -> bool: # 删除队尾元素 if self.isEmpty(): return False self.rear = (self.rear - 1 + self.k) % self.k return True def getFront(self) -> int: # 获取队头元素 if self.isEmpty(): return -1 return self.q[self.front] def getRear(self) -> int: # 获取队尾元素 if self.isEmpty(): return -1 return self.q[(self.rear - 1 + self.k) % self.k] def isEmpty(self) -> bool: # 判断队列是否为空 return self.front == self.rear def isFull(self) -> bool: # 判断队列是否已满 return (self.rear + 1) % self.k == self.front
可以通过以下代码进行测试:
deque = CircularDeque(3) print(deque.insertLast("pidancode.com")) # True print(deque.insertLast("皮蛋编程")) # True print(deque.insertLast("test")) # False,队列已满 print(deque.getFront()) # pidancode.com print(deque.getRear()) # 皮蛋编程 print(deque.deleteLast()) # True print(deque.getRear()) # pidancode.com print(deque.deleteFront()) # True print(deque.getFront()) # 皮蛋编程
相关文章