データ及びデータ構造
データとは何か
Section titled “データとは何か”コンピュータが処理する情報は、すべて「データ」として扱われます。たとえば、あなたの名前、年齢、テストの点数、写真──これらはすべてデータです。プログラムはこうしたデータを受け取り、加工し、結果を出力します。
データを効率よく扱うには、データの「入れ物」と「並べ方」を工夫する必要があります。入れ物にあたるのが変数や配列といった仕組みであり、並べ方にあたるのがデータ構造です。この節では、まずデータの基本的な入れ物を学び、次にデータ構造の代表例を見ていきます。
データの基本要素
Section titled “データの基本要素”変数(variable)
Section titled “変数(variable)”変数とは、データを一時的に格納しておく「名前付きの入れ物」です。たとえば「合計点」という変数に 250 という値を入れておけば、プログラム内で「合計点」と書くだけでその値を参照できます。変数には一度に1つの値だけが入り、新しい値を代入すると古い値は上書きされます。
フィールド(field)
Section titled “フィールド(field)”フィールドとは、1つのデータ項目を表す最小単位です。たとえば、社員の情報を管理するとき、「社員番号」「氏名」「所属部署」のそれぞれがフィールドにあたります。データベースの世界では「列(カラム)」と同じ意味で使われることもあります。
レコード(record)
Section titled “レコード(record)”レコードとは、関連する複数のフィールドをひとまとめにしたものです。先ほどの例では、「社員番号:1001」「氏名:山田太郎」「所属部署:営業部」という3つのフィールドをまとめたものが1件のレコードです。
| 社員番号 | 氏名 | 所属部署 |
|---|---|---|
| 1001 | 山田太郎 | 営業部 |
| 1002 | 鈴木花子 | 開発部 |
この表では、1行が1レコード、各列がフィールドに対応しています。
ファイル(file)
Section titled “ファイル(file)”ファイルとは、同じ種類のレコードを集めたものです。上の表全体が「社員ファイル」にあたります。コンピュータでは、データをファイルとしてまとめてハードディスクなどに保存します。
試験で出るポイント
配列(array)
Section titled “配列(array)”配列とは、同じ種類のデータを番号(添字・インデックス)付きで一列に並べたデータの入れ物です。たとえば、5人のテスト点数を管理するとき、変数を5つ個別に用意するのではなく、「点数[0], 点数[1], 点数[2], 点数[3], 点数[4]」のようにまとめて扱えます。
配列の特徴は、番号を指定すれば目的のデータにすぐアクセスできる点です。一方で、途中にデータを挿入したり削除したりするのは手間がかかります(後ろのデータをすべてずらす必要があるため)。
データ構造とは
Section titled “データ構造とは”プログラムで大量のデータを扱うとき、データをどのような形で保持し、どのような順序で出し入れするかによって、処理の効率が大きく変わります。この「データの保持・管理の仕組み」をデータ構造と呼びます。
代表的なデータ構造には、リスト、スタック、キュー、木構造があります。
リストとは、データを順番に並べ、各データが「次のデータの場所」を指し示すことでつながっているデータ構造です。配列と似ていますが、リストは途中へのデータの挿入や削除が容易である点が異なります。
配列では途中にデータを入れると後続のデータをすべてずらす必要がありますが、リストでは「次のデータの場所」を書き換えるだけで済みます。その代わり、リストは番号を指定して直接アクセスすることはできず、先頭からたどっていく必要があります。
| 比較項目 | 配列 | リスト |
|---|---|---|
| データへのアクセス | 番号指定で高速 | 先頭から順にたどる |
| 途中への挿入・削除 | 遅い(ずらす必要がある) | 速い(つなぎ替えるだけ) |
| メモリの使い方 | 連続した領域が必要 | 離れた場所でもよい |
スタック(Stack)── 後入れ先出し
Section titled “スタック(Stack)── 後入れ先出し”スタックとは、データを積み重ねるように格納し、最後に入れたデータから先に取り出すデータ構造です。この取り出し方をLIFO(Last In First Out:後入れ先出し)と呼びます。
スタックの操作は2つだけです。
- PUSH:スタックの一番上にデータを積む(追加する)
- POP:スタックの一番上からデータを取り出す(削除する)
身近な例で考えてみましょう。本を机の上に積み上げたとき、取り出せるのは一番上の本だけです。これがまさにスタックの動作です。
コンピュータでは、Webブラウザの「戻る」ボタンがスタックの代表例です。ページA → B → C と遷移すると、閲覧履歴がスタックに積まれます。「戻る」を押すと、最後に見たページC から順に B、A と戻っていきます。
試験で出るポイント
キュー(Queue)── 先入れ先出し
Section titled “キュー(Queue)── 先入れ先出し”キューとは、データを一列に並べ、先に入れたデータから先に取り出すデータ構造です。この取り出し方をFIFO(First In First Out:先入れ先出し)と呼びます。
キューでは、データの追加は列の末尾に行い、取り出しは列の先頭から行います。
身近な例では、プリンターの印刷待ち行列があります。先に印刷を指示したドキュメントから順に印刷されます。コンビニのレジ待ちの行列も同じ仕組みです。先に並んだ人から先に会計を済ませます。
スタックとキューの比較
Section titled “スタックとキューの比較”スタックとキューは混同しやすいため、対比して整理しましょう。
| 比較項目 | スタック | キュー |
|---|---|---|
| 取り出し順 | LIFO(後入れ先出し) | FIFO(先入れ先出し) |
| イメージ | 積まれた本 | レジ待ちの行列 |
| 追加の位置 | 上(トップ) | 末尾 |
| 取り出しの位置 | 上(トップ) | 先頭 |
| 具体例 | ブラウザの「戻る」機能 | プリンターの印刷待ち |
試験で出るポイント
木構造(ツリー構造)
Section titled “木構造(ツリー構造)”木構造(ツリー構造)とは、データが親子関係で階層的につながっているデータ構造です。ちょうど木を逆さにしたような形をしており、一番上に「根」、途中に「節」、末端に「葉」があります。
木構造の各要素をノード(節点)と呼びます。ノードには以下の種類があります。
| 用語 | 意味 |
|---|---|
| 根(ルート) | 木構造の最上位にある唯一のノード。親を持たない |
| 節(内部ノード) | 親と子の両方を持つノード。中間にある |
| 葉(リーフ) | 子を持たない末端のノード |
身近な例では、パソコンのフォルダ構造が木構造の代表です。「Cドライブ」というルートフォルダの下に「ドキュメント」「写真」などのフォルダがあり、さらにその下にファイルやフォルダが入れ子になっています。企業の組織図(社長 → 部長 → 課長 → 一般社員)も木構造で表現できます。
2分木(二分木)
Section titled “2分木(二分木)”2分木(二分木)とは、すべてのノードが持つ子の数が最大2つである木構造です。つまり、各ノードは「左の子」と「右の子」の最大2つだけを持ちます。
2分木はデータの検索や並べ替えに活用される重要な構造です。たとえば「2分探索木」では、左の子には親より小さい値、右の子には親より大きい値を配置するルールにすることで、効率的にデータを探すことができます。
試験で出るポイント
この節で学んだデータとデータ構造の全体像を整理します。
| 分類 | 用語 | ポイント |
|---|---|---|
| データの入れ物 | 変数 | 1つの値を格納する名前付きの箱 |
| 配列 | 同じ種類のデータを番号付きで並べる | |
| データのまとまり | フィールド → レコード → ファイル | 項目 → 1件分 → 集合体の階層 |
| データ構造 | リスト | データを鎖のようにつなげる。挿入・削除が容易 |
| スタック | LIFO(後入れ先出し)。PUSH / POP で操作 | |
| キュー | FIFO(先入れ先出し)。行列のイメージ | |
| 木構造 | 階層的な親子関係。根・節・葉で構成 | |
| 2分木 | 子が最大2つの木構造 |