キューは、ファーストインファーストアウト(FIFO)の原則に従う広く使用されているデータ構造です。 PHPの配列はキューイング機能を実装できますが、配列の直接操作により効率が低下する場合があります。この記事では、2つのスタック構造を使用して効率的なキュー操作を実現し、プログラムのパフォーマンスを向上させる方法について説明します。
Stackは、最後のファーストアウト(LIFO)を備えたデータ構造であり、その主な操作にはプッシュとポップが含まれます。要素をスタックの上部に押し込み、外出中に要素をスタックの上部に削除します。
キューは2つのスタックを介して実装されます。1つは入力スタックとして要素エンキューの責任を負い、もう1つは出力スタックとして要素デキューの責任を負います。出力スタックが空になると、入力スタックの要素が1つずつ飛び出して出力スタックに押し込まれ、それにより、ファーストでファーストアウトキューの動作が実現されます。
エントリ操作は比較的単純です。要素を入力スタックに押し込むだけです。
class Queue {
private $inputStack = [];
private $outputStack = [];
public function enqueue($item) {
array_push($this->inputStack, $item);
}
}
キュー操作は、最初に出力スタックが空であるかどうかを決定します。空の場合は、入力スタックのすべての要素をポップアップして、それらを出力スタックに押し込み、出力スタックから要素をポップアップします。空でない場合は、出力スタックの要素を直接ポップアップします。
public function dequeue() {
if (empty($this->outputStack)) {
while (!empty($this->inputStack)) {
array_push($this->outputStack, array_pop($this->inputStack));
}
}
if (!empty($this->outputStack)) {
return array_pop($this->outputStack);
}
return null;
}
次の例は、2つのスタックを使用してキューの基本操作を実装する方法を示しています。
$queue = new Queue();
$queue->enqueue(1);
$queue->enqueue(2);
$queue->enqueue(3);
echo $queue->dequeue(); // 出力1
echo $queue->dequeue(); // 出力2
echo $queue->dequeue(); // 出力3
2つのスタックを使用してキューを実装すると、頻繁なアレイの動きによって引き起こされるパフォーマンスの問題を効果的に回避できます。チームへの参加の操作はシンプルで効率的であり、ファーストインファーストアウト機能は、出発時に要素転送を通じて保証されます。追加のスタックスペースが必要ですが、キュー操作の全体的な実行効率が改善され、大量のデータを処理する際のキュー操作に特に適しています。