設計一個迴圈佇列-python.md
阿新 • • 發佈:2018-12-11
佇列的儲存結構中使用的最多的是迴圈佇列。迴圈佇列包括兩個指標, front 指標指向隊頭元素, rear 指標指向隊尾元素的下一個位置。 佇列為空的判斷條件是: front == rear 佇列滿的判斷條件是 (rear+1)%maxsize == front 佇列長度的計算公式: (rear-front+maxsize)%maxsize
正常情況下當front == rear是佇列有可能是滿也有可能是空,為了區分這兩種情況 我們需要在front前新增一個閒置單元。
示例
class MyCircularQueue:
def __init__(self, k):
"""
Initialize your data structure here. Set the size of the queue to be k.
:type k: int
"""
self.queue = [None] * (k + 1)
self.maxsize = (k + 1)
self.front = 0
self.rear = 0
def enQueue(self, value):
"""
Insert an element into the circular queue. Return true if the operation is successful.
:type value: int
:rtype: bool
"""
if self.isFull():
return False
self.queue[self.rear] = value
self.rear = (self.rear + 1) % self.maxsize
return True
def deQueue(self):
"""
Delete an element from the circular queue. Return true if the operation is successful.
:rtype: bool
"""
if self.isEmpty():
return False
self.queue[self.front] = None
self.front = (self.front + 1) % self.maxsize
return True
def Front(self):
"""
Get the front item from the queue.
:rtype: int
"""
if self.isEmpty():
return -1
return self.front
def Rear(self):
"""
Get the last item from the queue.
:rtype: int
"""
if self.isEmpty():
return -1
return self.rear
def isEmpty(self):
"""
Checks whether the circular queue is empty or not.
:rtype: bool
"""
return self.front == self.rear
def isFull(self):
"""
Checks whether the circular queue is full or not.
:rtype: bool
"""
return (self.rear + 1) % self.maxsize == self.front