ITパスポート試験 / 平成22年度 春期 ITパスポート試験 / 問85
certification-simodake-work

平成22年度 春期 ITパスポート試験 問85 解説 スタックのデータ構造

設問図

下から上へデータを積み上げ,上にあるデータから順に取り出すデータ構造(以下, スタックという)がある。これを用いて,図に示すような,右側から入力されたデー タの順番を変化させて,左側に出力する装置を考える。この装置に対する操作は次の 3通りである。 ① 右側から入力されたデータをそのまま左側に出力する。 ② 右側から入力されたデータをスタックに積み上げる。 ③ スタックの1番上にあるデータを取り出して左側に出力する。 この装置の右側から順番にX,Y,Zを入力した場合に,この①~③の操作を組み 合わせても,左側に出力できない順番はどれか。

  1. ア X,Z,Y
  2. イ Y,Z,X
  3. ウ Z,X,Y ✓ 正答
  4. エ Z,Y,X

解説

この問題は、入力順 X,Y,ZX, Y, Z をスタックというデータ構造の制約に従って並び替えたとき、どのような出力順が実現可能かを問うものです。スタックは「後入れ先出し(LIFO:Last-In, First-Out)」というルールを持ち、「最後に入れたデータを最初に取り出す」ことしかできません。

解答のコツは、各選択肢の順序になるように、入力・スタックへの積込・スタックからの取出しをシミュレーションすることです。

スタックの基本ルール

スタックは、皿を重ねるような構造です。上から皿を置き、上から皿を取る動作を繰り返します。このとき、最も新しく入れたデータが常に一番上にあり、一番最初に取り出されます。したがって、入力順が決まっている中で、スタックを挟むと「一度スタックに入れたものは、後から入れたものほど先に出力される」という制約が加わります。

順序の検証プロセス

入力順が X,Y,ZX, Y, Z と固定されている場合、それぞれの選択肢が実現可能か確認します。

  • X,Z,YX, Z, Y の場合:

    1. XX を入力し、そのまま左側へ出力(操作1)。
    2. YY を入力し、スタックへ積む(操作2)。
    3. ZZ を入力し、そのまま左側へ出力(操作1)。
    4. スタックに残った YY を取り出す(操作3)。 結果:X,Z,YX, Z, Y となり実現可能です。
  • Y,Z,XY, Z, X の場合:

    1. XX をスタックへ積む(操作2)。
    2. YY を入力し、そのまま左側へ出力(操作1)。
    3. ZZ を入力し、そのまま左側へ出力(操作1)。
    4. スタックに残った XX を取り出す(操作3)。 結果:Y,Z,XY, Z, X となり実現可能です。
  • Z,X,YZ, X, Y の場合: まず ZZ を出力するには、その前にある XXYY をすべてスタックに積まなければなりません。スタックには下が XX、上が YY の順で積まれます。この状態で ZZ を出力した後、次にスタックから取り出せるのは一番上の YY です。したがって Z,Y,XZ, Y, X の順にはなりますが、Z,X,YZ, X, Y という順序で取り出すことはスタックの構造上できません。

  • Z,Y,XZ, Y, X の場合:

    1. X,Y,ZX, Y, Z を順番にスタックへ積む(操作2を3回)。
    2. スタックから Z,Y,XZ, Y, X の順で取り出す(操作3を3回)。 結果:Z,Y,XZ, Y, X となり実現可能です。

データ構造とアルゴリズムの考え方

この問題は、コンピュータがデータを処理する際の「順序の制御」を理解しているかを問うています。スタックの構造は、例えばWebブラウザの「戻る」ボタン(直前に見たページが最後に出る)や、プログラムにおける関数の呼び出し管理(最後に行われた処理から先に終了する)など、現代のITシステムにおいて非常に重要な役割を果たしています。

試験対策としては、単に暗記するのではなく、実際に手元で「積む・出す」のシミュレーションができるようにしておくことが重要です。試験中に時間が許せば、簡単なメモ用紙に「スタック」と「出力順」の枠を書いて動かしてみるのが、最も確実な正答への近道です。

参考リンク

学習の記録にははてなブックマーク!

気づいたこと・覚えたことをコメントにメモしよう