科目B

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

次のプログラム中のaとbに入れる正しい答えの組合せを,解答群の中から選べ。ここで,配列の要素番号は 1 から始まる。 関数 push は,引数で与えられた整数をスタックに格納する。格納できた場合は true を返し,格納できなかった場合は false を返す。 関数 pop は,スタックから値を取り出して返す。スタックが空のときは未定義の値を返す。 スタックを,要素数が 4 である大域の整数型の配列 stack,及び次に値を格納する位置を示す大域の変数 stackPos で表現する。スタックの初期状態を図に示す。 プログラムでは,配列の領域外を参照してはならないものとする。 〔図〕
要素番号1234
stack43(網掛け)(網掛け)
要素番号 3 の下に ↑ stackPos 注記 網掛けはその要素が未定義であることを示す。 図 スタックの初期状態 〔プログラム〕
大域: 整数型: 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
答えを選ぶ

出典:令和7年度 基本情報技術者試験 科目B 公開問題 問3(問題文は IPA の公開問題。図・数式・下線などはテキストに直して掲載。解説は当サイト作成)

科目Bの解き方と全問の一覧

解説に誤りを見つけたら、解説の誤りを報告してください。

答えと解説を見る

正解:イ

覚える知識

スタックのpush/popトレース

スタックポインタが「次の空き位置」を指す実装では、push は格納してから +1、pop は −1 してから読む。

この問題で必要なこと

stackPos は「次に値を格納する位置」を表す(初期値 3、要素 1・2 は使用中)。push では stack[stackPos] に格納してから 1 増やすので、a は stackPos になる。pop では先に stackPos を 1 減らして最上段を指し、そこを読むので、b は stackPos − 1 になる。正解はイ。

ひっかけ

stackPos が最上段の要素を指すと思い込むと、a に stackPos − 1 を選んでしまう。pop で +1 を選ぶのは、取り出す方向を逆に取り違えたもの。

この知識を科目Aの過去問で覚える レッスン「スタックとキュー(LIFO と FIFO)」で学ぶ

同じ知識の過去問