🔳
配列と連結リストの違いと使い分け
配列(Array)と連結リスト(Linked List)は、どちらもデータをまとめて扱うための基本的なデータ構造です。しかし、それぞれ内部構造や操作の得意・不得意が異なるため、用途によって使い分けが重要です。
📦 配列(Array)
特徴
- メモリ上で連続した領域にデータを格納
- インデックスを使って即座にアクセス可能(
O(1)
) - サイズは固定(配列)または可変(スライス)
メリット
- 要素のランダムアクセスが高速
- メモリ効率が良い(オーバーヘッドが少ない)
デメリット
- 中間への挿入・削除は遅い(
O(n)
) - サイズ変更には再確保が必要(特に配列)
🔗 連結リスト(Linked List)
特徴
- 各要素(ノード)が次のノードへのポインタを保持
- メモリは非連続に確保される
- 単方向リスト(Singly)と双方向リスト(Doubly)がある
メリット
- 中間への挿入・削除が高速(ノードを特定できていれば
O(1)
) - サイズ変更が柔軟
デメリット
- ランダムアクセスが遅い(
O(n)
) - ポインタ分のメモリオーバーヘッドがある
🧠 配列と連結リストの使い分け
ケース | 推奨される構造 | 理由 |
---|---|---|
ランダムアクセスが多い | 配列 |
O(1) で即座にアクセス可能 |
頻繁に挿入・削除を行う(特に中間) | 連結リスト | 要素の移動が不要 |
サイズが事前に分かっている | 配列 | メモリ効率が良い |
サイズが頻繁に変わる | 連結リスト | 動的に拡張・縮小できる |
メモリの局所性を活かしたい | 配列 | 連続領域のためキャッシュ効率が高い |
Discussion