●リスト(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;
}
ここで -> と言う演算子が使われているので,下図で解説する。