基本情報技術者試験の公開問題を解こう!(令和7年度・科目B)(03)「スタックへの格納と取り出し操作」

ITの基礎

基本情報技術者試験の令和7年度の公開問題(科目B)を解こう。

今回のテーマは、「スタックへの格納と取り出し操作」である。

令和7年度 基本情報技術者試験 科目 B 公開問題 問3

正解:イ

アルゴリズム問題は、一見難しそうに見えるが、「データが今どうなっているか」を丁寧に追いかけると、正解にたどり着くことができる。

1. 問題の全体像を把握しよう

まずは、このプログラムのルール(仕様)を確認しよう。

  • Stack(スタック: 「後入れ先出し(LIFO)」のデータ構造。机に積んだ本のように、最後に置いたものを最初に取り出す。
  • stackPos(スタックポインタ): 今回の最重要ポイントである。図を見ると、「次に値を入れる位置」を指している。
  • 要素番号: 1から始まる。

図から読み取れる「初期状態」

  • stack: [4, 3, 未, 未] (要素数は4)
  • stackPos: 3 を指している
    • つまり、次に push したら 3番目 にデータが入る。

2. 空欄 [ a ] を考える:push(追加)の仕組み

push 関数は、「新しいデータをスタックに置く」処理である。

if (stackPos ≦ stackの要素数)
    stack[   a   ] ← inputData
    stackPos ← stackPos + 1
    return true
  1. どこに入れる?: stackPos の説明に「次に値を格納する位置を示す」とある。初期状態で stackPos は「3」なので、3番目にデータを入れたい。
  2. そのまま使う?: したがって、stack[stackPos] にデータを入れればOKである。
  3. 入れた後は?: 次に備えて stackPos を 1 増やしている(プログラムの次の行)。

よって、[ a ] = stackPos となる。


3. 空欄 [ b ] を考える:pop(取り出し)の仕組み

pop 関数は、「最後に入れたデータを取り出す」処理である。ここが少しトリッキーである!

if (stackPos > 1)
    stackPos ←    b    
    popData ← stack[stackPos]
    stack[stackPos] ← 未定義の値
endif
return popData
  1. 現在の stackPos はどこ?: 初期状態(stackPos=3)で考えよう。今、データが入っているのは「2番目」までである。3番目は空(未定義)である。
  2. 取り出したいのはどこ?: 最後に入れたのは「2番目」のデータ 3 である。
  3. どう動かす?: stackPos(今は3)を 1つ戻して「2」にする 必要がある。
  4. 代入する: その後、stack[stackPos](つまり stack[2])の値を popData に格納している。

この流れを作るには、まず stackPos を 1 減らさなければならない。
したがって、[ b ] = stackPos – 1 となる。

4. 結論

  • [ a ]:次に格納する位置そのものを使うので stackPos
  • [ b ]:データがある位置まで戻す必要があるので stackPos - 1

解答群からこれに一致するものを選ぶと…… 正解は「イ」 となる。


💡 初学者へのアドバイス

科目Bのスタックやキューの問題で迷ったら、「具体的な数字を入れてトレース」するのが鉄則である。

  • 「今 stackPos が 3 だから、push するなら 3 番目だな」
  • 「取り出すなら、一個前の 2 番目だな」

これだけで、複雑な式を暗記しなくても正解に辿り着ける。

コメント

タイトルとURLをコピーしました