平成22年度 春期 ITパスポート試験 問85 解説 スタックのデータ構造
下から上へデータを積み上げ,上にあるデータから順に取り出すデータ構造(以下, スタックという)がある。これを用いて,図に示すような,右側から入力されたデー タの順番を変化させて,左側に出力する装置を考える。この装置に対する操作は次の 3通りである。 ① 右側から入力されたデータをそのまま左側に出力する。 ② 右側から入力されたデータをスタックに積み上げる。 ③ スタックの1番上にあるデータを取り出して左側に出力する。 この装置の右側から順番にX,Y,Zを入力した場合に,この①~③の操作を組み 合わせても,左側に出力できない順番はどれか。
- ア X,Z,Y
- イ Y,Z,X
- ウ Z,X,Y ✓ 正答
- エ Z,Y,X
解説
この問題は、入力順 をスタックというデータ構造の制約に従って並び替えたとき、どのような出力順が実現可能かを問うものです。スタックは「後入れ先出し(LIFO:Last-In, First-Out)」というルールを持ち、「最後に入れたデータを最初に取り出す」ことしかできません。
解答のコツは、各選択肢の順序になるように、入力・スタックへの積込・スタックからの取出しをシミュレーションすることです。
スタックの基本ルール
スタックは、皿を重ねるような構造です。上から皿を置き、上から皿を取る動作を繰り返します。このとき、最も新しく入れたデータが常に一番上にあり、一番最初に取り出されます。したがって、入力順が決まっている中で、スタックを挟むと「一度スタックに入れたものは、後から入れたものほど先に出力される」という制約が加わります。
順序の検証プロセス
入力順が と固定されている場合、それぞれの選択肢が実現可能か確認します。
ア の場合:
- を入力し、そのまま左側へ出力(操作1)。
- を入力し、スタックへ積む(操作2)。
- を入力し、そのまま左側へ出力(操作1)。
- スタックに残った を取り出す(操作3)。 結果: となり実現可能です。
イ の場合:
- をスタックへ積む(操作2)。
- を入力し、そのまま左側へ出力(操作1)。
- を入力し、そのまま左側へ出力(操作1)。
- スタックに残った を取り出す(操作3)。 結果: となり実現可能です。
ウ の場合: まず を出力するには、その前にある と をすべてスタックに積まなければなりません。スタックには下が 、上が の順で積まれます。この状態で を出力した後、次にスタックから取り出せるのは一番上の です。したがって の順にはなりますが、 という順序で取り出すことはスタックの構造上できません。
エ の場合:
- を順番にスタックへ積む(操作2を3回)。
- スタックから の順で取り出す(操作3を3回)。 結果: となり実現可能です。
データ構造とアルゴリズムの考え方
この問題は、コンピュータがデータを処理する際の「順序の制御」を理解しているかを問うています。スタックの構造は、例えばWebブラウザの「戻る」ボタン(直前に見たページが最後に出る)や、プログラムにおける関数の呼び出し管理(最後に行われた処理から先に終了する)など、現代のITシステムにおいて非常に重要な役割を果たしています。
試験対策としては、単に暗記するのではなく、実際に手元で「積む・出す」のシミュレーションができるようにしておくことが重要です。試験中に時間が許せば、簡単なメモ用紙に「スタック」と「出力順」の枠を書いて動かしてみるのが、最も確実な正答への近道です。