ITの基礎知識|ITパスポート・基本情報

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

2026.06.04

科目Bに共通する注意事項(表記ルールなど)については、下記のリンク先を参照してください。

基本情報技術者 令和7年公開問題 科目Bの注意事項


問題

次のプログラム中の【  a  】と【  b  】に入れる正しい答えの組合せを,解答群の中から選べ。ここで,配列の要素番号は1 から始まる。

関数 push はスタックに値を格納し,格納できた場合は true,できなかった場合は false を返す。関数 pop はスタックから値を取り出して返す。スタックが空のときは未定義の値を返す。

[プログラム]

大域: 整数型: stackPos ← 3
大域: 整数型の配列: stack ← {4, 3, 未定義の値, 未定義の値}

○論理型: push(整数型: inputData)
  if (stackPos ≦ stackの要素数)
    stack[ 【 a 】 ] ← inputData
    stackPos ← stackPos + 1
    return true
  else
    return false
  endif

○整数型: pop()
  整数型: popData ← 未定義の値
  if (stackPos > 1)
    stackPos ← 【 b 】
    popData ← stack[stackPos]
    stack[stackPos] ← 未定義の値
  endif
  return popData

選択肢(a と b の組合せ)

    • a:stackPos
    • b:stackPos + 1
    • a:stackPos
    • b:stackPos - 1
    • a:stackPos - 1
    • b:stackPos + 1
    • a:stackPos - 1
    • b:stackPos - 1

Show answer

解答

解説

スタックの仕組み

スタックは LIFO(Last In First Out:後入れ先出し) のデータ構造です。今回のプログラムはそれぞれ以下のように実装されています。

  • 関数 push
    • スタックの末尾(stackPos が指す位置)に値を書き込み,stackPos を 1 増やす
  • 関数 pop
    • stackPos を 1 減らし,その位置の値を取り出す

今回のプログラムのポイントは、”stackPos” が示している先が「次に値を格納する位置」となっている点にある。

空欄 a(push の書き込み位置)

初期状態では stackPos = 3 です。stackPos は「次に書き込む位置」を示しています。

なので、引数で渡ってきた “inputData” の代入先は stack[stackPos] が正しいです。

他の選択肢にある、stack[stackPos – 1] の場所だと、すでに値がセット済みの要素となるので、そちらを選ぶと「スタックの最終データ」が毎回書き換えられるロジックとなってしまいます。

→ a = stackPos

書き込み後,stackPos ← stackPos + 1 でポインタを進めます。これはプログラムにすでに記述されています。

空欄 b(pop の stackPos 更新)

pop では「一番最後に push した値」を取り出します。stackPos = 3 の場合,最後に書き込まれたのは stack[2] = 3 です(stack[3] 以降は未定義)。

pop 内の処理の流れ:
  1. stackPos を 1 減らす → stackPos = 2
  2. popData ← stack[stackPos] → popData = stack[2] = 3
  3. stack[stackPos] ← 未定義の値 → stack[2] = 未定義

よって b = stackPos − 1 です。

→ b = stackPos - 1

動作確認

初期状態は以下の通り。

  • stack = {4, 3, 未定義, 未定義}
  • stackPos = 3
  • stackの要素数 = 4
push(5) 実行:
  • stackPos(3) ≦ 4 → 真
  • stack[3] ← 5
    • この時 stack = {4, 3, 5, 未定義} となっている。
  • stackPos ← 4
  • return true
pop() 実行(stackPos = 4):
  • stackPos(4) > 1 → 真
  • stackPos ← 4 − 1 = 3
  • popData ← stack[3] = 5
  • stack[3] ← 未定義
  • return 5 ✓(最後に push した 5 が取り出せた)