正解 ア 次の問題へ

問3 配列を用いてスタックを実現する場合の構成要素として、最低限必要なものはどれか。
ア スタックに最後に入った要素を示す添字の変数
イ スタックに最初に入った要素と最後に入った要素を示す添字の変数
ウ スタックに一つ前に入った要素を示す添字の変数を格納する配列
エ スタックの途中に入っている要素を示す添字の変数

解説

スタックとは、最後に入れたものが最初に取り出せる、後入れ先出し方式のデータ構造です。

スタックを配列で実現すると言う事は、以下のイメージのように「入れる時には、データの末尾がどこか分かる必要がある」「出す時にも、データの末尾が分かる必要がある」ので、アの「スタックに最後に入った要素を示す添字の変数」が正解です。

配列で作ったスタックに4つのデータが入っている場合、添字の[0]から[3]までデータが入ることになります。
添字:[0][1][2][3][4][5][6][7][8][9]
配列:[*][*][*][*][ ][ ][ ][ ][ ][ ]

★ここにデータを追加する場合に必要な変数はなんでしょうか?
添字:[0][1][2][3][4][5][6][7][8][9]
配列:[*][*][*][*][ ][ ][ ][ ][ ][ ]
変数:3(最後に入った要素を示す添字)
変数に最後に入った要素を示す添字があれば、「次は配列の[4]にデータを入れればいいんだ」と分かります。
ちなみに、データを追加した場合は以下のようになります。
添字:[0][1][2][3][ 4 ][5][6][7][8][9]
配列:[*][*][*][*][ * ][ ][ ][ ][ ][ ]
変数: 4 (最後に入った要素を示す添字)
配列に追加したデータが入り、変数にはその添字を設定します。

★次はデータを取り出す場合に必要な変数です。
添字:[0][1][2][3][4][5][6][7][8][9]
配列:[*][*][*][*][ ][ ][ ][ ][ ][ ]
変数:3(最後に入った要素を示す添字)
やはり、必要なのは「最後に入った要素を示す添字」の変数です。最後の要素の場所がわからなければ、最後の要素を取り出す事ができないためです。
実際にデータを取り出すと以下のようになります。
添字:[0][1][2][3][4][5][6][7][8][9]
配列:[*][*][*][ ][ ][ ][ ][ ][ ][ ]
変数: 2 (最後に入った要素を示す添字)
データを取り出した分だけ、変数の添字も減らさないと次にデータを追加したり減らすときに誤動作が発生します。
以上により、アの「スタックに最後に入った要素を示す添字の変数」が正解となります。