ENGINEER_SPEC: データ構造
システム開発において「どのデータ構造を選ぶか」は、パフォーマンスに直結する重要な判断です。
1. キュー (Queue) & スタック (Stack)
これらは「データを出し入れする順序」を強制する仕組みです。
- キュー (FIFO):最初に入れたものを最初に出す。Webサーバーのリクエスト処理やプリンタの印刷待ちなどで使われます。
- スタック (LIFO):最後に入れたものを最初に出す。エディタの「戻る
(Undo)」機能や、プログラムの関数呼び出し履歴の管理に使われます。
2. 優先度付きキュー (Priority Queue)
単なる「順番」ではなく、各データに割り当てられた「重要度」に従ってデータを取り出します。最短経路探索(ダイクストラ法)やタスクスケジューリングで重宝されます。
3. 配列 (Array)
配列はアドレスが連続したデータ構造です。要素がメモリ上に隙間なく並んでいるため、インデックスを指定して一瞬でデータにアクセス(ランダムアクセス)できるのが最大の強みです。
- メリット:N番目のデータへのアクセスが極めて高速。
- デメリット:途中にデータを挿入・削除する際、後ろの要素をすべてずらす(シフトする)必要があるため、処理コストが高くなります。
4. 連結リスト (単方向 vs 双方向)
配列とは異なり、「次のデータの場所(ポインタ)」を持つことで、メモリ上のバラバラな場所にデータを配置できます。
- 単方向リスト:各ノードが「次」のポインタのみを持ちます。メモリ消費は最小限ですが、一方向にしか進めず後戻りができません。
- 双方向リスト:各ノードが「次」と「前」の両方のポインタを持ちます。逆方向への移動や、要素を削除する際のポインタの繋ぎ変えがスムーズに行えます。