2 リスト
2.3 連結リストと配列
これで、一方向リストでも配列のように複数のデータが並んだリストを考えることができそれぞれのデータを操作することもできるようになりました。では一方向リストで行った操作を配列で実現するとしたらどうなるでしょうか。
- データの追加(C-san
のデータを追加)
データをリストの最後に追加する場合は一方向リストと同様に最後のデータの場所を確認してからその後に加えることになります。しかし、データをリストの先頭に追加するには他のデータ全てを一つずつ後ろに移動しなければいけません。また配列はあらかじめ扱うデータの数を指定しなければいけませんのであらかじめ扱うデータの数が分からない場合は無駄にメモリを消費してしまうか、確保したメモリが足りなくなってしまうことがあります。
- データの参照
参照については一方向リストと同じように先頭から順にたどることで可能です。
- データの挿入(B-san のデータの後に C-san
のデータを挿入)
挿入も追加と同じように挿入する場所以降のデータを移動する処理が必要になります。
1.
2.
3.
4.
5.
- データの削除(B-san のデータを削除)
削除の場合は削除したデータ以降のデータを前に移動する処理が必要になります。
1.
2.
3.
4.
5.
各操作を比較すると、リストを扱う場合は一方向リスト(連結リスト)のほうが配列よりも個々の情報の処理が簡単になります。ただし、簡単というのは配列の場合はあるデータを操作するときに他のデータも操作する必要があるため処理の数が多いという意味です。構造体を使った連結リストは仕組みが分かりにくいので利用する前に正確に理解しておきましょう。