平成21年 秋期 応用情報技術者 午前 問5

n 個の要素x1, x2, …, xn から成る連結リストに対して、新たな要素xn +1の末尾への追加に要する時間をf (n )とし、末尾の要素xn の削除に要する時間をg (n )とする。
n が非常に大きいとき、実装方法1と実装方法2におけるの挙動として、適切なものはどれか。

[実装方法1]
 先頭のセルを指すポインタ型の変数frontだけをもつ。
  

[実装方法2]
 先頭のセルを指すポインタ型の変数frontと、末尾のセルを指すポイント型の変数rearを併せもつ。
  

実装方法1 実装方法2
ほぼ1になる。 ほぼ1になる。
ほぼ1になる。 ほぼn に比例する。
ほぼn に比例する。 ほぼ1になる。
ほぼn に比例する。 ほぼn に比例する。


答え イ


解説
連結リストの要素の追加・削除処理では要素の数n が大きくなると、リストをたどる時間が大きくなり、処理時間はリストをたどる時間で決まることになる。
実装方法1では新たな要素を末尾に追加するときも、末尾の要素を削除するときも、変数frontから末尾までリストを順にたどって処理する必要があるため、f (n )とg (n )の時間に大きな差は発生しない。
実装方法2では新たな要素を末尾に追加するときは変数rearを利用するとリストの最後をすぐに知ることができるが、末尾の要素を削除するときは変数rearが指しているxn からxn -1をたどる手段はなく、実装方法1と同様に変数frontから末尾までリストを順にたどる必要があるので、末尾の要素を削除する処理時間g (n )は末尾に要素を追加するf (n )のn 倍の時間がかかる事になる。


キーワード
・連結リスト

キーワードの解説
  • 連結リスト
    データ構造の一種で、データのリストの中に次のリストを示すリンク(ポインタ)を持っている。
    片方向リスト片方向リスト

    双方向リスト双方向リスト

もっと、「連結リスト」について調べてみよう。

戻る 一覧へ 次へ