1. 程式人生 > >設計一個迴圈佇列-python.md

設計一個迴圈佇列-python.md

      佇列的儲存結構中使用的最多的是迴圈佇列。迴圈佇列包括兩個指標, 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