令和元年度 秋期 ITパスポート試験 問62 解説 スタックの動作
下から上へ品物を積み上げて,上にある品物から順に取り出す装置がある。この 装置に対する操作は,次の二つに限られる。 PUSH x:品物 x を1個積み上げる。 POP: 一番上の品物を1個取り出す。 最初は何も積まれていない状態から開始して,a,b,c の順で三つの品物が到着 する。一つの装置だけを使った場合,POP 操作で取り出される品物の順番としてあ り得ないものはどれか。
- ア a, b, c
- イ b, a, c
- ウ c, a, b ✓ 正答
- エ c, b, a
解説
この問題は、データ構造の一種であるスタック(Stack)の特性を理解しているかを問うものです。解き方のコツは、最後までスタックに残るデータと、先に出るデータの「順序の逆転」に注目することです。
今回のケースでは、aが一番下、cが一番上という順序で積まれるため、取り出すときは必ず c, b, a の順序が基本になります。途中でPOPを挟んで一部を先に出すことはできますが、スタックの下にあるデータ(例えばa)が、上のデータ(例えばb)よりも先に出てくることは構造上あり得ません。
選択肢ウの c, a, b を検証すると、cが最初に出たあと、aを取り出すためには、その上に積まれているはずのbが先に取り出されていなければなりません。しかし、bが取り出される前にaが出ることはないため、この順序は不可能です。
スタックの基本原則は、後入れ先出し(LIFO:Last In, First Out)です。最後に投入したものが最初に取り出されるという仕組みは、身近な例で言うと、積み上げられたトレイの山や、ブラウザの「戻る」ボタンの履歴管理などで活用されています。
この考え方は、アルゴリズムやプログラミングの基礎問題として頻出です。スタックの他にも、先入れ先出し(FIFO:First In, First Out)のキュー(Queue)という概念も併せて覚えておきましょう。行列や、プリンタの印刷待ちデータ処理などがキューの代表例です。
試験対策としては、実際に a, b, c と書いた紙切れを順番に重ねて、POPのタイミングを変えながらどのような並び順ができるか手元でシミュレーションしてみるのが最も確実な理解への近道です。
- 基本的なデータ構造:スタックとキューとは?【ITパスポート】 - YouTube
- スタックとキューの仕組みがわかる!ITパスポート対策解説記事