1. 配列ベースのデータ構造
・配列 (Array): 最も基本的なデータ構造。インデックスで直接アクセス可能(O(1))だが、挿入・削除は効率が悪い(O(n))
・動的配列 (Dynamic Array): サイズを動的に変更できる配列(JavaのArrayListなど)
・スタック (Stack): LIFO(後入れ先出し)の原則で動作する配列
・キュー (Queue): FIFO(先入れ先出し)の原則で動作する配列
2. リンクベースのデータ構造
連結リスト (Linked List): 各要素がデータと次要素へのポインタを持つ
・単方向連結リスト:前方向のみの連結
・双方向連結リスト:前後両方向の連結
・スキップリスト (Skip List): 複数の層を持つ連結リストで、検索を高速化したもの
3. ツリーベースのデータ構造
・二分探索木 (Binary Search Tree): 各ノードが最大2つの子ノードを持ち、左の子は親より小さく、右の子は親より大きい値を持つ
・AVL木: 自己平衡二分探索木の一種
・赤黒木 (Red-Black Tree): 別の自己平衡二分探索木で、多くの言語の標準ライブラリで使用される
・B木/B+木: ディスクアクセスを最適化した多分木で、データベースでよく使われる
・トライ (Trie): 文字列検索に特化した木構造
4. ハッシュベースのデータ構造
・ハッシュセット (HashSet): 重複のない要素の集合
・ハッシュマップ (HashMap)
"わかりやすいのでこちら参照": キーと値のペアを格納
・ブルームフィルタ (Bloom Filter): 要素が集合に属しているかを確率的に判定する構造
5. グラフベースのデータ構造
・隣接リスト (Adjacency List): ノードに隣接するノードのリストを保持
・隣接行列 (Adjacency Matrix): 行列でノード間の関係を表現
6. 特殊なデータ構造
・ヒープ (Heap): 優先度付きキューを実装するための木構造
・ディスジョイントセット (Disjoint Set/Union-Find): 要素の集合を効率的に管理
・セグメント木 (Segment Tree): 区間クエリを効率的に処理
各データ構造には、特定の操作に対して得意・不得意があり、用途に応じて適切なものを選ぶことが重要です。
例えば:
頻繁な検索が必要:ハッシュマップか二分探索木
順序付きデータ:赤黒木やAVL木
範囲検索:B+木やセグメント木
文字列検索:トライ