令和4年度 春期 応用情報技術者試験 午前 問題 問5
リストには,配列で実現する場合とポインタで実現する場合とがある。リストを配列で実現した場合の特徴として,適切なものはどれか。ここで,配列を用いたリストは配列に要素を連続して格納することによってリストを構成し,ポインタを用いたリストは要素と次の要素へのポインタを用いることによってリストを構成するものとする。
解答・解説
正解: ア. リストにある実際の要素数にかかわらず,リストに入れられる要素の最大個数に対応した領域を確保し,実際には使用されない領域が発生する可能性がある。
リストを配列で実現する場合、メモリ上に連続した領域をあらかじめ確保し、そこに要素を順番に格納して管理します。この方式には、以下のような特徴があります。
- 領域の確保:あらかじめ想定される最大の要素数に合わせて領域を確保するため、実際の要素数が少ない場合は未使用の無駄な領域が発生します。
- 要素へのアクセス:インデックス(添字)を指定することで、任意の要素へ一定時間で直接アクセス(ランダムアクセス)が可能です。
- 要素の挿入・削除:途中に要素を挿入・削除する場合、それ以降のすべての要素を前後にずらす処理が必要となり、要素数に比例した時間がかかります。
これに対し、ポインタを用いたリスト(連結リスト)は、要素ごとにデータと次の要素へのポインタ(アドレス)を保持し、メモリ上で離れた場所にある要素同士をつなぎ合わせて管理します。
したがって、配列を用いたリストの特徴として適切なものはアとなります。
各選択肢の解説
- ア:正解。配列を用いたリストでは、リストに入れられる最大個数分のメモリ領域をあらかじめ確保するため、実際には使用されない領域が発生する可能性があります。
- イ:誤り。配列を用いたリストは、インデックスによって任意の要素へ直接アクセスできるため、要素の参照にかかる時間は一定です。先頭から順番に要素をたどっていく必要があり、要素数に比例した時間がかかるのは、ポインタを用いたリストの特徴です。
- ウ:誤り。要素のデータ領域に加えて「次の要素を指し示すための領域(ポインタ)」が別途必要となるのは、ポインタを用いたリストの特徴です。配列の場合は要素が連続して格納されるため、ポインタは不要です。
- エ:誤り。配列を用いたリストにおいて途中に要素を挿入する場合、挿入位置より後ろにあるすべての要素を一つずつ後方にずらす必要があるため、要素数に比例した時間がかかります。挿入位置が分かっている場合に一定時間で挿入できるのは、ポインタのつなぎ替えだけで済むポインタを用いたリストの特徴です。