Pythonで2つのキューを使ってスタックを実装する方法
2つのキューを使用してスタックを実装するには、「Stack_structure」クラスと「Queue_structure」クラスが必要です。それぞれのクラスには、スタックおよびキューに対して値を追加・削除するためのメソッドが定義されています。
この手法では、push操作のたびに新しい要素をqueue_1に追加し、queue_2内の既存要素をすべてその後ろへ移動させてから2つのキューを入れ替えることで、キューでありながらスタック特有のLIFO(後入れ先出し)の動作を実現しています。
以下に具体的な実装例を示します。
サンプルコード
class Stack_structure:
def __init__(self):
self.queue_1 = Queue_structure()
self.queue_2 = Queue_structure()
def check_empty(self):
return self.queue_2.check_empty()
def push_val(self, data):
self.queue_1.enqueue_operation(data)
while not self.queue_2.check_empty():
x = self.queue_2.dequeue_operation()
self.queue_1.enqueue_operation(x)
self.queue_1, self.queue_2 = self.queue_2, self.queue_1
def pop_val(self):
return self.queue_2.dequeue_operation()
class Queue_structure:
def __init__(self):
self.items = []
self.size = 0
def check_empty(self):
return self.items == []
def enqueue_operation(self, data):
self.size += 1
self.items.append(data)
def dequeue_operation(self):
self.size -= 1
return self.items.pop(0)
def size_calculate(self):
return self.size
my_instance = Stack_structure()
print('Menu')
print('push <value>')
print('pop')
print('quit')
while True:
my_input = input('What operation would you like to perform ? ').split()
operation = my_input[0].strip().lower()
if operation == 'push':
my_instance.push_val(int(my_input[1]))
elif operation == 'pop':
if my_instance.check_empty():
print('Stack is empty.')
else:
print('The deleted value is: ', my_instance.pop_val())
elif operation == 'quit':
break実行結果
Menu push <value> pop quit What operation would you like to perform ? push 56 What operation would you like to perform ? push 34 What operation would you like to perform ? push 78 What operation would you like to perform ? push 90 What operation would you like to perform ? pop The deleted value is: 90 What operation would you like to perform ? quit
コードの解説
「Stack_structure」クラスを作成し、内部で2つのキューを初期化します。
スタックが空かどうかを判定する「check_empty」メソッドを定義します。
スタックに要素を追加する「push_val」メソッドを定義します。新しい要素をqueue_1に入れ、queue_2の既存要素をすべてその後ろへ移動させた後、2つのキューを入れ替えます。
スタックから要素を取り出す「pop_val」メソッドを定義します。
「Queue_structure」クラスを作成し、空のリストを初期化してサイズを0に設定します。
キューが空かどうかを判定する「check_empty」メソッドを定義します。
キューに要素を追加する「enqueue_operation」メソッドを定義します。
キューから要素を取り出す「dequeue_operation」メソッドを定義します。
キューのサイズを取得する「size_calculate」メソッドを定義します。
「Queue_structure」のインスタンスを2つ生成し、スタックの内部構造として利用します。
ユーザーには「Menu」「push」「pop」「quit」の4つの操作を選択できるメニューを表示します。
ユーザーが入力した内容に基づいて、スタックの要素に対する操作が実行されます。
処理結果はコンソールに出力されます。
-
Pythonのunittestモジュールで学ぶユニットテストの基礎
本記事では、Python 3.x(およびそれ以前のバージョン)に標準搭載されている unittest モジュールを通じて、ソフトウェアテストの基本を解説します。unittest を使うことで、テストの自動化、セットアップ用コードと終了処理コードの共有、そして各フレームワークごとの独立したテスト実行が可能になります。ユニットテストでは、オブジェクト指向のさまざまな概念が活用されます。ここでは、特によく使われる主要な概念について見ていきましょう。unittestの中核を担う4つの概念TestCase(テストケース):特定の入力に対する応答を検証するための基底クラスです。unittest の基底クラ
-
Pythonのリストをスタックとキューとして使う方法を徹底解説
本記事では、Python 3.x(およびそれ以前のバージョン)におけるスタック(Stack)とキュー(Queue)という基本的なデータ構造について解説します。それぞれのデータ構造の仕組みや操作方法を、実際のコード例とともにわかりやすく学んでいきましょう。 本記事で扱う主なトピックは以下の通りです。 挿入操作(Push / Enqueue) 削除操作(Pop / Dequeue) 表示・走査(トラバース)操作 前提知識:リストとリスト操作の基礎関連するデータ構造:リスト操作 スタック(Stack)とは スタックでは、オブジェクトが積み重なるように格納され、取り出す際には到着した順序とは逆の順