データ構造

モノに合わせて引き出しやハンガーを使い分けるように、コンピューター内のデータを目的別にしまう「オーダーメイドの収納ボックス」です。

定義 データ構造とは、コンピューターのメモリ内にデータをやみくもに詰め込むのではなく、必要なときに素早く正確に取り出して使えるようにするための整理ルールのことです。収納の目的に応じて引き出しの仕切りを変えるように、データの性質や使い方に合わせて最適な構造を設計します。

なぜ1種類の引き出しだけではダメなのか?

クローゼットを片付けるとき、靴下もコートもズボンもすべて同じ大きさの四角い箱に詰め込んだらどうなるでしょうか? 着たい服を1着探すたびに箱の中身を全部ひっくり返さなければならず、大変な時間がかかってしまいますよね。

コンピューターもまったく同じです。メモリ(コンピューターの記憶スペース)という広大な倉庫の中に何千万個もの情報がごちゃ混ぜになっていたら、必要なデータを見つけるだけで動作が重くなってしまいます。そこでプログラマーたちは、データを目的別に効率よくしまえる専用の収納方式を考案しました。

こうしたデータの収納ルールの規格を総称して「データ構造」と呼びます。背番号を振って並べる本棚のような構造から、お皿のように上に積み重ねていく構造まで、多彩な収納の型が用意されています。

データ構造の概念:混在データと目的別データ構造の比較 混在データ 非効率な探索 整理済データ構造 迅速で正確な管理

目的に応じて使い分ける代表的な収納ボックス

もっとも身近なのが、番号を振って順番に並べる「配列(Array)」です。マンションの部屋番号のように、番号さえ分かれば目的のデータへ瞬時にアクセスできます。ただし、途中に新しいデータを割り込ませようとすると、それ以降のデータを1マスずつ後ろにずらさなければならないという手間があります。

一方、バイキングのお皿のように上から重ねて上から取り出す「スタック(Stack)」は、最後に入れたデータを最初に取り出したいときに便利です。私たちがネットサーフィンをするときに使うブラウザの「戻る」ボタンは、まさにこのスタック構造で動いています。

逆に、テーマパークの行列のように先に入った順番でデータを取り出す「キュー(Queue)」もあります。プリンターの印刷待ちや飲食店の順番待ちシステムなどはすべてこのキュー方式で動いており、順番を公平に守ってくれます。

データ構造の基本:配列・スタック・キュー 配列 0 1 2 3 番号で直接検索 積層 上から出し入れ 先に来た順

もう少し正確に言うと

もう少し正確に言うと、あらゆる場面で完璧に機能する万能のデータ構造は存在しません。データを探すスピードが電光石火のように速いものは新しいデータを追加するのに時間がかかったり、より多くのメモリ空間を消費したりといったトレードオフ(相殺関係)が常に発生するからです。

例えば、辞書のように単語と意味をペアで保持する「ハッシュテーブル(Hash Table)」は検索が非常に高速ですが、あらかじめ空き枠を多く用意しておく必要があるためメモリを多く消費します。木の枝のように枝分かれしていく「ツリー(Tree)」構造は膨大なデータの中から素早く目的のものを見つけ出せますが、最初の構築や管理が複雑になります。

結局のところプログラマーは、問題を解決する手順であるアルゴリズムを組み立てる前に、どのデータ構造を使えばコンピューターの資源をもっとも節約できるかを慎重に選んでいるのです。

🤔 よくある誤解

✕ 誤解

どんな処理でも一番速く動く、完璧で最強のデータ構造がひとつ存在する。

✓ 事実

どんなデータ構造にも一長一短があります。検索が速いものは追加が遅かったりメモリを多く使ったりするため、トレードオフを考慮して状況に合ったものを選ぶ必要があります。

🧺 日常で出会う場面

1 ウェブブラウザの「戻る」ボタンを押すと、直前に開いたページから順に戻る「スタック(Stack)」構造が使われています。
2 銀行や病院の発券機で、番号札を引いた順番に呼ばれるのは「キュー(Queue)」構造の仕組みです。
3 検索エンジンでキーワードを入力した瞬間に結果が表示される背景には、「ハッシュテーブル(Hash Table)」や「ツリー(Tree)」構造の技術があります。
💡 つまり ひとことで

データ構造とは、コンピューターのメモリにデータを最も効率よく保存し、スムーズに取り出すための整理ルールのことです。