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



正解 イ問題へ
分野:アルゴリズムとプログラミング
カテゴリ:データ構造及びアルゴリズム
カテゴリ:データ構造及びアルゴリズム
広告
解説
スタックは、後入れ先出し(LIFO:Last-In, First-Out)のデータ構造です。データを追加するときは要素群の最後尾に加え、取り出しは直前に追加したデータから行います。
〔aについて〕
空欄には配列 stack の要素番号を指定する式が入ります。
関数 push は、引数で受け取った値をスタックに追加する操作です。図を見ると、変数 stackPos が示す要素番号3は、要素群の最後尾に位置しており"未定義(まだ値が入っていない)"なので、この場所に新しい値を入れることになります。したがって、格納先の要素番号には stackPos を指定します。よって、空欄aにはstackPosが当てはまります。
その直後に行われているインクリメント(+1)は、stackPos を1つ後ろにずらすための処理です。
〔bについて〕
関数 pop は、スタックから値を取り出す操作です。スタックは「後から入れたものを先に出す」構造なので、最後に入れた値が取り出す対象となります。図の配列 stack に対し pop を実行した場合、取り出すべき要素は要素番号2の「3」です。これは、現在の stackPos の1つ前の位置(stackPos - 1)に位置するので、popData への代入処理が行われる前に、stackPos を1つ減らす(3→2)必要があります。よって、空欄bにはstackPos - 1が当てはまります。
したがって適切な組合せは「イ」となります。
〔aについて〕
空欄には配列 stack の要素番号を指定する式が入ります。
関数 push は、引数で受け取った値をスタックに追加する操作です。図を見ると、変数 stackPos が示す要素番号3は、要素群の最後尾に位置しており"未定義(まだ値が入っていない)"なので、この場所に新しい値を入れることになります。したがって、格納先の要素番号には stackPos を指定します。よって、空欄aにはstackPosが当てはまります。
その直後に行われているインクリメント(+1)は、stackPos を1つ後ろにずらすための処理です。
〔bについて〕
関数 pop は、スタックから値を取り出す操作です。スタックは「後から入れたものを先に出す」構造なので、最後に入れた値が取り出す対象となります。図の配列 stack に対し pop を実行した場合、取り出すべき要素は要素番号2の「3」です。これは、現在の stackPos の1つ前の位置(stackPos - 1)に位置するので、popData への代入処理が行われる前に、stackPos を1つ減らす(3→2)必要があります。よって、空欄bにはstackPos - 1が当てはまります。
したがって適切な組合せは「イ」となります。
広告