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