2 リスト

   2.1 連結リスト
 リストとは複数のデータの並び(順番付けられたまとまり)のことです。同一の情報をまとめてリストにすることはよくあることで、住所のリストやスケジュールのリストなどさまざまなものをリストにして考えることをしています。
 一般にリストと呼ばれているデータ構造には線形リストと連結リストがあります。線形リストとは同じ要素のデータが順番に並んでいるものです。

線形リストのイメージ

 それに対して、連結リストとは同じ要素のデータの並びですがそのデータの並びかたは直線的に並んでいるとは限りません。ただし、リストとはデータが順番付けられていないといけませんのでそれぞれのデータがどこにあるかは分からないといけません。

連結リストのイメージ

 それぞれをC言語で実現する場合どのようにしたらよいでしょうか?
 線形リストは同じデータが順番に並んでいますので配列を使うことで実現できます。

線形リストをC言語で実現する場合のイメージ

 一方、連結リストはどうでしょうか? それぞれのデータは順番に並んでいるとは限りません、しかし順番付けされていないといけませんのでAというデータの次にBというデータがあるということが分からないといけません。ここで、前節で説明した自己参照的構造体を利用することができます。構造体のメンバに自分自身の構造体の型へのポインタを定義し、このポインタにリスト上で次に来るデータのアドレスを情報として持つことで順番付けを行うことができます。

連結リストをC言語で実現する場合のイメージ