Python 3は単純なループキューを実現

2474 ワード

タイトルはLeetcodeキューから
ループキュー実装を設計します.ループキューは、FIFO(先進的なプリフェッチ)の原則に基づいて動作し、キューの最後がキューの先頭に接続されてループを形成する線形データ構造である.「リングバッファ」とも呼ばれています.
ループキューの利点の1つは、このキューが以前に使用した空間を利用できることです.通常のキューでは、キューがいっぱいになると、キューの前にスペースがあっても次の要素を挿入できません.しかし、ループキューを使用すると、これらのスペースを使用して新しい値を格納することができます.
あなたの実装は、次の操作をサポートする必要があります.
MyCircularQueue(k):コンストラクタで、キュー長をkに設定します.Front:キューの先頭から要素を取得します.キューが空の場合は、-1を返します.Rear:キューの最後の要素を取得します.キューが空の場合は、-1を返します.EnQueue(value):ループキューに要素を挿入します.挿入に成功した場合は真を返します.deQueue():ループキューから要素を削除します.削除に成功した場合は、真を返します.isEmpty():ループキューが空であるかどうかを確認します.isFull():ループキューがいっぱいかどうかを確認します. 
私の解:
class MyCircularQueue:

	def __init__(self, k: int): #and
		"""
		Initialize your data structure here. Set the size of the queue to be k.
		"""
		self.__length = k
		self.queue = [0] * k
		self.__head = 0
		self.__tail = -1
		self.__count = 0

	def enQueue(self, value: int) -> bool:
		"""
		Insert an element into the circular queue. Return true if the operation is successful.
		"""
		if self.isFull() == False:
			if self.__tail == self.__length-1: #          
				self.__tail = 0
			else:
				self.__tail += 1
			self.queue[self.__tail] = value
			self.__count += 1
			return True
		else:
			return False


	def deQueue(self) -> bool:
		"""
		Delete an element from the circular queue. Return true if the operation is successful.
		"""
		if self.isEmpty() == False :
			self.queue[self.__head] = 0
			self.__count -= 1
			if self.__head != self.__tail:
				if self.__head == self.__length-1:
					self.__head = 0
				else:
					self.__head += 1
			else:
				self.__head = 0
				self.__tail = -1
			return True
		else:
			return False

	def Front(self) -> int:
		"""
		Get the front item from the queue.
		"""
		if self.isEmpty():
			return -1
		else:
			return self.queue[self.__head]

	def Rear(self) -> int:
		"""
		Get the last item from the queue.
		"""
		if self.isEmpty():
			return -1
		else:
			return self.queue[self.__tail]

	def isEmpty(self) -> bool:
		"""
		Checks whether the circular queue is empty or not.
		"""
		if self.__count == 0:
			return True 
		else:
			return False

	def isFull(self) -> bool:
		"""
		Checks whether the circular queue is full or not.
		"""
		if self.__count == self.__length:
			return True
		else:
			return False