🐥

Python で独自の Queue クラスを実装する

2023/04/05に公開約2,100字

はじめに

キューは、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

ログインするとコメントできます