データ構造をやさしく図解 — スタック・キュー・リスト・木構造

公開: 2026年7月 カテゴリ: アルゴリズム

「スタックとキューって何が違うの?」「木構造の根・節・葉?」——データ構造は、データを"どう並べて・どう出し入れするか"のルールです。適切な構造を選ぶと、プログラムは速く・シンプルになります。この記事では、配列・スタック・キュー・連結リスト・木構造を、動きの図でやさしく整理します。アルゴリズムを動かすなら ソート可視化探索可視化 もどうぞ。

データ構造とは — 出し入れのルールが違う「入れ物」

同じデータでも、「どんな入れ物に、どんな順で入れるか」で得意なことが変わります。先頭・末尾・途中のどこに素早くアクセスできるか取り出す順番はどうなるか——この違いを理解して使い分けるのがポイントです。まずは基本の5つを見ていきます。

配列(Array)— 番号で一発アクセス

配列は、同じ種類のデータを連続した箱に並べ、添字(インデックス、0から始まる番号)で各要素を指定します。a[3] のように、何番目でも一発で読み書き(ランダムアクセス)できるのが最大の強み。一方、途中に要素を割り込ませたり削ったりするには、後ろの要素を全部ずらす必要があり、そこは苦手です。

スタック(Stack)— 後入れ先出し(LIFO)

スタックは、最後に入れたものから取り出す構造。積み重ねた本や皿のように、上に載せて(push)、上から取る(pop)。この性質をLIFO(Last In First Out:後入れ先出し)と呼びます。

スタック:上に積んで(push)、上から取る(pop)=LIFO A(最初) B C(最後) push(積む) pop(取る) 最後に積んだ C から 取り出される
図1: スタックは後入れ先出し。Undo(元に戻す)や関数の呼び出し履歴で使われる

使いどころ: エディタ・ブラウザの「元に戻す(Undo)」、関数の呼び出し履歴(コールスタック)、括弧の対応チェックなど。「最後にしたことを最初に取り消す」場面で活躍します。

キュー(Queue)— 先入れ先出し(FIFO)

キューは、先に入れたものから取り出す構造。レジの行列と同じで、後ろに並び(enqueue)、先頭から抜けていく(dequeue)。この性質をFIFO(First In First Out:先入れ先出し)と呼びます。

キュー:後ろに並び(enqueue)、先頭から出る(dequeue)=FIFO A B C ← dequeue 先頭(A)から出る enqueue ← 後ろに追加 並んだ順(A→B→C)にそのまま処理される
図2: キューは先入れ先出し。印刷の順番待ち、処理待ち行列などで使われる

使いどころ: プリンタの印刷待ち、OSのタスク処理待ち、Webサーバーのリクエスト処理など。「来た順に公平にさばく」場面で使われます。TCPのデータ送受信バッファなどにも通じる考え方です。

連結リスト(Linked List)— つなぎ替えで挿入が速い

連結リストは、各要素(ノード)が「」と「次の要素の位置(ポインタ)」を持ち、数珠つなぎになった構造です。途中への挿入・削除がポインタのつなぎ替えだけで済むのが強み。一方、n番目の要素を得るには先頭からたどる必要があり、配列のような一発アクセスはできません。

連結リスト:各ノードが「次」を指す。挿入はつなぎ替えるだけ A ● B ● C ● → null X(挿入)
図3: BとCの間にXを挿入するときも、ポインタを2本つなぎ替えるだけ(要素の移動が不要)

木構造(Tree)— 階層を表す

木構造は、データの階層関係・親子関係を表します。一番上の出発点を根(ルート)、枝分かれの各点を節(ノード)、末端を葉(リーフ)と呼びます。各節が持つ子が最大2つの木を二分木といい、探索やソートの土台になります。

二分木:根から枝分かれし、末端が葉 50 30 70 20 40 90 ← 根(ルート) ← 節(ノード) ← 葉
図4: 左の子<親<右の子、を保った二分木は「二分探索木」。探索が高速になる

この図のように「左の子 < 親 < 右の子」を保った二分木を二分探索木といい、大小をたどるだけで目的の値へ効率よく到達できます。この「半分ずつ絞る」考え方は 二分探索の可視化 と同じです。木構造は、ファイルシステム(フォルダの入れ子)やHTMLのDOM、組織図などにも現れます。

使い分けのまとめ

構造取り出し順得意苦手
配列添字で自由n番目への一発アクセス途中の挿入・削除
スタック後入れ先出し(LIFO)直近を取り消す・戻す途中の参照
キュー先入れ先出し(FIFO)来た順に公平処理途中の参照
連結リスト先頭からたどる途中の挿入・削除n番目への一発アクセス
木構造たどり方による階層表現・探索実装がやや複雑

🖥️ 手を動かして理解するなら:データ構造の上で動くアルゴリズムを、ソートアルゴリズム可視化(配列の並べ替え)や探索アルゴリズム可視化(二分探索の絞り込み)で、フローチャート付きで1手ずつ追えます。擬似言語での配列操作は擬似言語ステッパーで変数の変化を見ながら試せます。

基本情報技術者試験ではこう出る

「LIFOはスタックかキューか」「FIFOで正しく取り出される順序は」「連結リストと配列で挿入・アクセスのコストを比較」「木構造の根・節・葉・深さ」などが定番です。とくにスタック=LIFO、キュー=FIFO の対応は必ず覚えましょう。科目Bの擬似言語問題でも、配列やスタックを操作するトレースが頻出です。アルゴリズムの計算量は 探索の可視化 で O(n) と O(log n) を体感すると腹落ちします。

よくある質問

Q. 逆ポーランド記法(後置記法)はなぜスタックで計算できるの?
A. 数値を見たらスタックに積み、演算子を見たら上から2つ取り出して計算し、結果をまた積む——という手順で、括弧なしで正しく計算できるからです。「最後に積んだ2つを使う」というLIFOの性質がぴったり合います。

Q. 双方向リスト・循環リストとは?
A. 双方向リストは各ノードが「次」だけでなく「前」も指すもので、前後どちらにもたどれます。循環リストは末尾が先頭に戻る形で、ぐるぐる回して処理する用途に向きます。いずれも連結リストの応用です。

Q. ハッシュ表(連想配列)もデータ構造?
A. はい。キーを計算(ハッシュ)して格納場所を直接求めることで、平均的にとても速く検索・追加できる構造です。キーと値のペアを扱うときに使われます。ハッシュの考え方は当サイトのハッシュ生成ツールでも触れられます。

まとめ

データ構造は「出し入れのルールが違う入れ物」。配列=番号で一発、スタック=LIFO、キュー=FIFO、連結リスト=つなぎ替えで挿入が速い、木=階層と探索。それぞれの得意・不得意を押さえれば、問題に合った構造を選べるようになります。理屈を覚えたら、可視化で実際の動きを見て定着させましょう。

関連ページ: ソートアルゴリズム可視化探索アルゴリズム可視化擬似言語ステッパー擬似言語の読み方記事一覧