2 連結リスト,双方向リスト

一覧へ戻る

2.1 連結リスト

 リストを表現するためのデータ構造の一つである.「自身のデータ」以外に「別のデータへの参照を保存するフィールド」を持っている.
 挿入や削除では配列よりも優れている.なぜなら,配列によるリストに新たなデータを挿入する場合は,それ以降の要素をすべてずらす必要があるが,連結リストでは参照する要素の付け替えだけで済むからだ
 しかし,探索では配列の二分探索に負ける.

2.1.1 実装例

 連結リストは以下のコードのように実装することができる.次の要素を指し示す多面は余分な領域が必要である.


class MyLinkedData{
    String key;
    String data;
    MyLinkedData next;
};

MyLinkedData p = header;
while(p!=null){
    System.out.println("" + p);
    p = p.next;
}
        

2.1.2 欠点


2.2 双方向リスト

 リストの先頭(head)と末尾(tail)に特殊なデータを置く.

2.2.1 実装例

 双方向リストは以下のコードのように実装することができる.次の要素を指し示す多面は余分な領域が必要である.


class MyDoublyLinkedData{
    private String key;
    private String data;
    MyDoublyLinkedData prev;
    MyDoublyLinkedData next;
}
        


p.prev.next = n;
n.prev = p.prev;
n.next = p;
p.prev = n;
        


p.prev.next = n;
n.prev = p.prev;
n.next = p;
p.prev = n;
        


p.prev.next = p.next;
p.next.prev = p.prev;
        


p.prev.next = p.next; // p.prev.next = null; と同義
if(p.next!=null){
    p.next.prev = p.prev;
}
        

3 連結リストの計算量


以上.(2025-11-16_17:26) 一覧へ戻る