この概念が出た関連問題

この試験の対策ガイド

基本情報技術者試験 対策ガイド

合格率・勉強法・参考書の選び方をまとめています

見る →
答えと解説を見る(先に解くのがおすすめ)

正解は イ

解説

配列で実装したスタックのpush/pop関数の空欄を埋める問題です。スタックはLIFO(Last In First Out:後入れ先出し)のデータ構造で、配列とポインタ(stackPos)で実装できます。初期状態:stackPos=1(次に格納する位置が配列の1番目を指す)。push操作の手順:①配列に空きがあるかチェック(stackPos <= 配列サイズ)。②stack[stackPos] ← 格納する値。③stackPos ← stackPos + 1。pop操作の手順:①スタックが空でないかチェック(stackPos > 1)。②stackPos ← stackPos - 1。③return stack[stackPos]。空欄aはpushの境界条件チェック(stackPos <= 4)で配列オーバーフローを防ぎます。空欄bはpopの境界条件チェック(stackPos > 1)でスタックが空(アンダーフロー)を防ぎます。どちらの条件も間違えるとプログラムが配列の範囲外にアクセスしたり、空のスタックから不正な値を取り出してしまいます。

なぜ他の選択肢は違うのか

選択肢 ア
pushの境界チェックで「stackPos > 4」は逆の条件です。stackPosが5以上のとき格納を拒否すべきなのに、4より大きい場合(つまりオーバーフロー時)にpushを実行してしまう誤った条件になります。
選択肢 ウ
「push操作の条件がstackPos <= 4」は正しいですが、選択肢cが正解でない場合はpopの条件が不適切です。aとbの組み合わせ全体として正しい条件になっているかを確認する必要があります。
選択肢 エ
popの境界チェックで適切な条件は「stackPos > 1」です。「stackPos > 0」は配列の添字を1から始める場合に、空スタックの判定が1つずれてしまう可能性があります。

解くときのポイント

スタックの配列実装:pushは「stackPos <= 上限」で空き確認→格納→stackPos++。popは「stackPos > 下限」でスタック非空確認→stackPos--→取り出し。配列の添字が1始まりか0始まりかで境界値が変わることに注意。