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

〔プログラム〕
大域: 整数型: 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
- イa: stackPos / b: stackPos − 1
- ウa: stackPos − 1 / b: stackPos + 1
- エa: stackPos − 1 / b: stackPos − 1
正解と解説
正解:イ a: stackPos / b: stackPos − 1
stackPosは「次に値を格納する位置」を指しているので、pushでは今のstackPosの位置にそのまま格納し、その後に1増やせばよい。popでは、最後に格納された値は現在のstackPosより1つ手前にあるため、先にstackPosを1減らしてからその位置の値を取り出す。この対称的な操作でLIFOが実現される。
選択肢ごとの解説
- アpopでstackPosを増やしており、取り出す方向が逆になっている。
- イpushは現在位置に格納、popは先に1減らしてから取り出すという正しい組合せ。
- ウpushの格納位置が1つ手前になり、直前の値を上書きしてしまう。
- エpushの格納位置がずれており、格納した値が正しく取り出せない。
同じ分野の他の問題
- 次のプログラム中の a と b に入れる正しい答えの組合せを、解答群の中から選べ。ここで、配列の要素番号は1から始まる。…2026年度 公開問題 科目B 問4
- 図の木構造は2分探索木である。a〜gの値の大小関係として,適切なものはどれか。ここで,a〜gの値は重複しないものとする。2025年度 公開問題 科目A 問3
- 次のプログラム中の に入れる正しい答えを、解答群の中から選べ。ここで、配列の要素番号は1から始まる。 図1に示すグラフの…2024年度 公開問題 科目B 問3
- 双方向のポインタをもつリスト構造のデータを表に示す。この表において新たな社員Gを社員Aと社員Kの間に追加する。追加後の表…2023年度 公開問題 科目A 問2
- 次のプログラム中の に入れる正しい答えを、解答群の中から選べ。 手続delNodeは、単方向リストから、引数posで指定…2022年度 公開問題 科目B 問10
最終更新:2026-08-25/解説・選択肢ごとの解説は資格暗記が独自に作成しています。問題文と選択肢の出典は上記のとおりです。