グラフ構造の隣接リスト(Adjacency List)とは?基本概念と実装方法を解説
グラフは代表的な非線形データ構造の一つです。頂点(ノード)でデータを表し、その頂点同士の関係を辺(エッジ)で表現します。グラフGは「頂点の集合V」と「辺の集合E」という2つの要素から構成され、G(V,E)という形式で表記されます。まずは具体例を見てみましょう。

このグラフには5つの頂点と5つの辺が存在します。すべての辺には向きが定義されています。例として、頂点BとDを結ぶ辺に注目すると、始点はB、終点はDとなります。そのため、BからDへは移動できますが、逆にDからBへ移動することはできません。
グラフは非線形であり、一定の規則性を持たない構造です。そのため、メモリ上でグラフを扱うには、目的に応じたいくつかの表現方法を使い分ける必要があります。主な表現方法は以下の3つです。
- 隣接行列による表現
- 辺リストによる表現
- 隣接リストによる表現
本記事では、この中から「隣接リスト」による表現方法について詳しく見ていきます。
隣接リストによるグラフの表現
隣接リストは、連結リストをベースとしたグラフの表現方法です。この手法では、各頂点が「その頂点と直接つながっている他の頂点の一覧」をリストとして保持します。そして各リストの末尾にはnull値が接続されており、そこがリストの終端であることを示しています。

隣接リストは、頂点数に対して辺の数が少ない疎なグラフを効率的に表現できる点が大きな特徴です。必要なメモリ領域をO(V+E)に抑えられるほか、特定の頂点に隣接する頂点を順番に辿る処理も高速に行えます。一方で、2つの頂点が直接つながっているかどうかを確認する場合には、リストを走査する必要があるため、隣接行列よりも時間がかかることがあります。このように、隣接リストと隣接行列にはそれぞれ利点・欠点があるため、扱うグラフの性質や実行したい処理に応じて適切な表現方法を選択することが重要です。
-
対応ベースのデータ構造とは?全体対応と葉対応の仕組みを徹底解説
対応ベースのデータ構造の概要全体対応(Total Correspondence)と葉対応(Leaf Correspondence)は、より洗練された対応手法として知られています。いずれの手法においても、要素の半分は最小優先度キュー(min PQ)に、残りの半分は最大優先度キュー(max PQ)に配置されます。また、要素の総数が奇数である場合には、1つの要素がバッファに格納されます。このバッファに置かれた要素は、どちらの優先度キューにも所属しない点が特徴です。全体対応(Total Correspondence)の仕組み全体対応の手法では、最小優先度キュー内の各要素 x が、最大優先度キュー内の別
-
データ構造における二分木の表現方法|配列と連結リストの違いを解説
コンピュータメモリ上での二分木の表現方法 ここでは、二分木をコンピュータのメモリ上でどのように表現するかについて解説します。表現方法には主に2種類あり、配列を使う方法と連結リスト(リンクリスト)を使う方法があります。 配列による表現 まず、次のような二分木を例に考えてみましょう。 配列による表現では、木の要素をレベル順(幅優先順)に走査しながら格納していきます。つまり、ノードを上のレベルから順番に保存する方式です。存在しない要素がある場合は、その位置を空白のまま残します。上記の木を配列で表現すると、次のようになります。 123456789101112131415 10516-81520