●リスト(linked list, 連結リスト)
配列以外にも多くのデータ構造がある。配列と対照的な性質を持つ代表的なデータ
構造として,リスト(linked list, 連結リスト)がある。
※リストを学習する前に,メモリアドレスを扱う「ポインタ」の要点を思いだそう。
※シーケンシャルアクセスは,日本語で順次アクセスとも言う。
●配列とリストの特徴を比較すると次のようになる
セル構造体の定義例を以下に示す。
struct Cell {
int data;
struct Cell * next;
};
以下のプログラムでは,セル1,セル2,セル3の順でセルを繋ぐ。コメントアウト部分を有効にすると,セル2とセル3の間にセル4を挿入する。
#include <stdio.h>
struct Cell {
int data;
struct Cell * next;
};
typedef struct Cell Cell;
int main() {
Cell c1, c2, c3, c4;
Cell * start = &c1;
Cell * p = NULL;
c1.data = 100; c2.data = 200; c3.data = 300;
c4.data = 250;
c1.next = &c2; c2.next = &c3; c3.next = NULL;
// c4.next = c2.next;
// c2.next = &c4;
p = &c1;
while ( p != NULL ) {
printf( "%d\n", p->data ); // (*p).data は p->data とも書ける
p = p->next; // (*p).next は p->next とも書ける
}
getchar();
return 0;
}
ここで -> と言う演算子が使われているので,下図で解説する。