phpでスタック構造
PHPでスタック構造を実現します。
スタック構造ってのは、後入れ先出しという構造で、後に入れたものを先に取り出す、ビンに小銭を入れていくようなイメージです。
英語で書くと、Last In First Outで、LIFOって言いますね。
ちなみに、キューってのもあって、先入れ先出しという構造で、先に入れたものを先に取り出す、ところてんを押し出すようなイメージです。
こちらは英語で書くと、First In First Outで、FIFOって言います。
スタックに入れて取り出すコードです。
<?php
//配列の準備
$stack = array();
//スタックに追加
array_push($stack, "a");
array_push($stack, "b");
array_push($stack, "c");
//スタックから取り出す
$data1 = array_pop($stack); // 最後に入れた、cが取り出されます。スタックからcは無くなります。
print_r($stack);
echo "取り出された値は " . $data1 . "です。";
?>
これを実行すると、このような結果になります。
Array
(
[0] => a
[1] => b
)
取り出された値は cです。
では、スタックからすべてのデータを取り出して表示する処理を作成してみます。
<?php
//配列の準備
$stack = array();
//スタックに追加
array_push($stack, "a");
array_push($stack, "b");
array_push($stack, "c");
while($data = array_pop($stack)){
echo $data."\n";
}
?>
実行結果
c
b
a
これだと失敗します。スタックに0を入れた場合に、0とNULLを同じと判断してしまい、失敗します。
<?php
//配列の準備
$stack = array();
//スタックに追加
array_push($stack, "a");
array_push($stack, "b");
array_push($stack, "0");
array_push($stack, "c");
while($data = array_pop($stack)){
echo $data."\n";
}
?>
実行結果
c
while文の条件文を、NULLじゃない場合は処理をするとします。0とNULLを区別するように、!==を使用します。
<?php
//配列の準備
$stack = array();
//スタックに追加
array_push($stack, "a");
array_push($stack, "b");
array_push($stack, "0");
array_push($stack, "c");
while(($data = array_pop($stack)) !== null){
echo $data."\n";
}
?>
実行結果
c
0
b
a
キューの場合は、array_shiftで配列を先頭から取り出します。
キューに入れるのは、array_pushで同じです。
ディスカッション
コメント一覧
まだ、コメントがありません