問題 No.2304
プログラムが別の関数を呼び出した後、元の関数へ正しく処理を戻すために、直近の戻り番地を次々に記憶させていく場面で利用されるデータ構造の特性として、最も適切なものはどれか。
【正解の解説】
データ構造の頂点に対してデータの追加と取り出しを行い、最後に追加されたデータから順に取り出される特性
これは机の上に本を積み重ねる動作に似ています。新しく買った本は一番上に置かれ、次に本を読みたくなったときも一番上の本から手に取りますよね。このように、直前に行った処理ほど優先して完了させるプログラムの戻り番地の管理に最適な仕組みです。
スポンサーリンク
【その他の選択肢の解説】
データ構造の両端からデータの追加と取り出しを行い、最初に追加されたデータから順に取り出される特性
最初に追加されたデータから順に取り出されるのは、スタックではなくキューと呼ばれる別のデータ構造です。キューは遊園地のアトラクションの列のように、先頭に並んだ人から順番に処理される仕組みであり、今回の関数呼び出しの戻り番地管理とは真逆の動きになります。
データ構造の頂点に対してデータの追加と取り出しを行い、最初に追加されたデータから順に取り出される特性
データの追加と取り出しを片側(頂点)から行う点は合っていますが、最初に入れたものから取り出すとそれは先入れ先出しのキューと同じになってしまいます。スタックは後から入れたものを真っ先に取り出すLIFOのルールで動くため、この順序の記述は不適切です。
データ構造の中間位置に対してデータの追加と取り出しを行い、指定されたキーに基づいて自由に取り出される特性
スタックはデータの出し入れ口が「片方の端(頂点)」に限定されている厳格なルールを持つデータ構造です。途中のデータに直接アクセスしたりキーで自由に取り出したりすることはできず、関数が入れ子状に呼び出されるプログラムの特性上、順序を守る必要があるためこの仕組みは使えません。