🐥
Python で独自の Queue クラスを実装する
はじめに
キューは、FIFO(First-In-First-Out)原則に基づいてデータを処理するデータ構造です。この記事では、Python で独自の Queue クラスを実装する方法を解説します。この Queue クラスでは、データの追加(エンキュー)と取り出し(デキュー)を行うメソッドが提供されます。
Queue クラスの実装
class Queue:
def __init__(self, max_size):
self.max_size = max_size
self.queue = [0] * max_size
self.head = 0
self.tail = 0
def is_full(self):
return (self.tail + 1) % self.max_size == self.head
def is_empty(self):
return self.head == self.tail
def enqueue(self, data):
if self.is_full():
raise Exception("これ以上データを入れられません")
else:
self.queue[self.tail] = data
self.tail = (self.tail + 1) % self.max_size
print(f"データ {data} を追加しました")
def dequeue(self):
if self.is_empty():
raise Exception("取り出すデータが存在しません")
else:
data = self.queue[self.head]
self.head = (self.head + 1) % self.max_size
return data
クラスの構造
-
__init__(self, max_size)
: クラスの初期化メソッドです。キューの最大サイズを指定して、キュー、ヘッド、テールを初期化します。 -
is_full(self)
: キューが満杯かどうかを判定するメソッドです。True または False を返します。 -
is_empty(self)
: キューが空かどうかを判定するメソッドです。True または False を返します。 -
enqueue(self, data)
: キューにデータを追加するメソッドです。キューが満杯の場合は、例外をスローします。 -
dequeue(self)
: キューからデータを取り出すメソッドです。キューが空の場合は、例外をスローします。
使用例
以下に、実装した Queue クラスの使用例を示します。
if __name__ == "__main__":
queue = Queue(6)
for i in range(6):
try:
queue.enqueue(i)
except Exception as e:
print(e)
for i in range(6):
try:
dequeued_data = queue.dequeue()
print(f"取り出したデータ {dequeued_data}")
except Exception as e:
print(e)
このコードは、Queue
クラスをインスタンス化し、6 つのデータをエンキューし、その後、同じデータをデキューしています。例外処理を用いることで、キューが満杯または空の場合に適切なエラーメッセージを表示します。
まとめ
この記事では、Python で独自の Queue クラスを実装する方法を解説しました。このクラスでは、データの追加と取り出しを行うメソッドが提供され、エンキューとデキューの操作が容易になります。また、キューの最大サイズを指定することで、異なるサイズやインスタンスのキューを作成することができます。
Queue クラスは、プログラム内でデータを順序付ける必要がある場合や、FIFO 原則に基づいてデータを処理する必要がある場合に役立ちます。例外処理を使用してエラーを処理することで、コードの堅牢性も向上しています。この独自の Queue クラスを使用して、Python プログラムでデータを効果的に管理できます。
Discussion