令和3年度 春期 応用情報技術者試験 午前 問5

A,B,CA, B, C の順序で入力されるデータがある。各データについてスタックへの挿入と取出しを1回ずつ行うことができる場合,データの出力順序は何通りあるか。

スタックへのデータの出し入れを示す模式図
図の説明テキスト

スタックへのデータの出し入れを示す模式図。水平方向の線から下向きの矢印が伸び、上部が開いた四角形(内部に縦書きで「スタック」と記載)を指している。水平線の右端には入力データである「A, B, C」が並び、左端からは左向きの矢印が伸びて出力方向を示している。

解答・解説

正解: ウ. 5

スタックは 後入れ先出し(LIFO: Last In First Out) のデータ構造です。図の模式図が示すように、データは上部の開口部から挿入され、最後に入れたものから順に取り出されます。
データは A,B,CA, B, C の順でスタックに挿入されます。スタックへの挿入と取出しのタイミングの組み合わせによって、以下のようなデータの出力順序が考えられます。

  • 最初に AA を出力する場合(AA を挿入してすぐ取り出す)
    • BB を挿入・取出し、CC を挿入・取出し →A,B,C\rightarrow A, B, C
    • B,CB, C と続けて挿入し、スタックから順に取出し →A,C,B\rightarrow A, C, B
  • 最初に BB を出力する場合(A,BA, B と挿入して BB を取り出す)
    • スタックに残った AA を取出し、CC を挿入・取出し →B,A,C\rightarrow B, A, C
    • CC を挿入・取出し、最後にスタックに残った AA を取出し →B,C,A\rightarrow B, C, A
  • 最初に CC を出力する場合(A,B,CA, B, C をすべて挿入してから順に取り出す)
    • 取出しを続けると、後から入れた順に出力される →C,B,A\rightarrow C, B, A

3つのデータを並べる順列は 3!=63! = 6 通りありますが、C,A,BC, A, B という出力順序だけは実現できません。なぜなら、最初に CC が出力された時点でスタック内には下から A,BA, B の順でデータが積まれており、次に出力されるのは必ず BB となるためです。

したがって、出力可能な順序は5通りとなるため、ウ が正解です。

各選択肢の解説

  • ア(3): 誤りです。出力順序は上記の通り5通り存在します。
  • イ(4): 誤りです。出力順序は上記の通り5通り存在します。
  • ウ(5): 正解です。
  • エ(6): 誤りです。3つのデータ A,B,CA, B, C のすべての順列(3!=63! = 6 通り)が出力できるわけではなく、C,A,BC, A, B の順序はスタックの構造上不可能なため6通りにはなりません。

Spineチーム