次のプログラム中の a と b に入れる正しい答えの組合せを、解答群の中から選べ。ここで、配列の要素番号は1から始まる。 関数pushは、引数で与えられた整数をスタックに格納する。格納できた場合はtrueを返し、格納できなかった場合はfalseを返す。 関数popは、スタックから値を取り出して返す。スタックが空のときは未定義の値を返す。 スタックを、要素数が4である大域の整数型の配列stack、及び次に値を格納する位置を示す大域の変数stackPosで表現する。スタックの初期状態を図に示す。 プログラムでは、配列の領域外を参照してはならないものとする。

stackPosが次の格納位置ならpushは現在位置に入れる

頻出基本情報技術者試験2025年度 公開問題 科目B3/アルゴリズムとプログラミング / データ構造

図 スタックの初期状態。要素番号1〜4の配列stack。要素番号1に4、要素番号2に3が格納されている。要素番号3・4は網掛け(未定義)。stackPosは要素番号3を指している(矢印で示される)。注記:網掛けはその要素が未定義であることを示す。
図 スタックの初期状態。要素番号1〜4の配列stack。要素番号1に4、要素番号2に3が格納されている。要素番号3・4は網掛け(未定義)。stackPosは要素番号3を指している(矢印で示される)。注記:網掛けはその要素が未定義であることを示す。
〔プログラム〕 大域: 整数型: 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: stackPos / b: stackPos − 1

stackPosは「次に値を格納する位置」を指しているので、pushでは今のstackPosの位置にそのまま格納し、その後に1増やせばよい。popでは、最後に格納された値は現在のstackPosより1つ手前にあるため、先にstackPosを1減らしてからその位置の値を取り出す。この対称的な操作でLIFOが実現される。

選択肢ごとの解説

出典:令和7年度 公開問題 基本情報技術者試験 科目B 問3(IPA)

同じ分野の他の問題

最終更新:2026-08-25/解説・選択肢ごとの解説は資格暗記が独自に作成しています。問題文と選択肢の出典は上記のとおりです。