平成21年度 秋期 ITパスポート試験 問54 解説 スタック操作のシミュレーション
数字が書かれた箱を図のように積み上げてある。表に示す操作を,操作1,操作2, 操作3,操作4の順に行った場合,操作4が終わったときの箱の状態はどれか。
- ア.
- イ. ✓ 正答
- ウ.
- エ.
解説
この問題は、箱の積み上げ状態を逐次更新していく手順を正確に追うことが鍵です。初期状態(上から 4, 3, 2, 2, 1)から各操作を適用していきます。
操作の手順を追う
初期状態をリスト形式で とします(左側が一番上)。
- 操作1: 上から二つ(4と3)を取り出し、 を一番上に積む。 状態:
- 操作2: 数字3を一番上に積む。 状態:
- 操作3: 上から三つ(3, 7, 2)を取り出し、平均 を一番上に積む。 状態:
- 操作4: 上から二つ(4と2)を取り出し、差の絶対値 を一番上に積む。 状態:
これに該当するのは選択肢イです。
スタック構造の理解
この問題は、データ構造における「スタック(Stack)」の考え方を問うています。スタックとは、最後に入れたデータが最初に取り出される「後入れ先出し(LIFO: Last-In, First-Out)」という原則に基づく仕組みです。
今回の問題では「箱を上から取り出す」「新しい箱を一番上に積む」という動作が繰り返されています。これは、メモリ管理や関数の呼び出し管理、あるいはWebブラウザの「戻る」ボタンなどで日常的に使われているスタックの動作と全く同じです。
プログラミング的な思考プロセス
この問題を解くコツは、頭の中だけで考えず、紙の余白に現在の上から順の数値を書き出していくことです。
- 操作の内容を簡潔な数式に置き換える(例: 加算=和、平均=合計/個数、差の絶対値=減算してプラスにする)。
- 操作のたびに変化する「上から見た現在の数値リスト」を書き換える。
- 手順を飛ばさず、一歩ずつ進める。
計算ミスを防ぐために、一工程ずつ状態を書き直すことが確実です。
この知識が役立つ場面
この問題の教育的意図は、アルゴリズムの基礎である「逐次処理(順を追って計算する)」と「スタック」という抽象的なデータ構造を視覚的に理解することにあります。
実務では、例えば複雑な計算式(逆ポーランド記法など)をコンピュータが計算する際にスタックが活用されています。また、プログラミングにおいて「処理の順序」を管理する際、この考え方が必須となります。ITパスポート試験では、こうした「身近な物事に例えた情報技術の基礎概念」を問う問題が頻出するため、図や表を使って具体的な状態を整理する習慣をつけておきましょう。