データ構造とは(全体像)
データ構造とは、データを、どんな形で持っておくか(整理のしかた・しまい方)のことだ。整理のしかたによって、「探しやすい」「足しやすい」など、得意・不得意が変わる。
代表的なものを見ておこう。
- 配列 … データを番号(インデックス)で並べる。番号を指定すれば一発で取り出せるが、途中への挿入・削除は手間がかかる。
- リスト … データをつなぎ合わせて持つ。挿入・削除は楽だが、目的の場所まで順にたどる必要がある。
- スタック … 後から入れたものが、先に出る(後入れ先出し=LIFO)。
- キュー … 先に入れたものが、先に出る(先入れ先出し=FIFO)。
ここで一番のポイント。スタックは後入れ先出し(LIFO)、キューは先入れ先出し(FIFO)。「スタック=キュー」と思い込むと誤りになる。
詳しく:スタックとキュー、配列とリスト
ここが心臓部。とくに大事な区別を表で押さえよう。
主なデータ構造
| 構造 | 出し入れの順 | イメージ |
|---|---|---|
| スタック | 後入れ先出し(LIFO) | 積んだ皿(最後に置いた皿を最初に取る) |
| キュー | 先入れ先出し(FIFO) | レジの行列(先に並んだ人が先に進む) |
| 配列 | 番号で一発アクセス | 番号つきのロッカー |
| リスト | つなげて持つ | 数珠つなぎ |
- スタック(LIFO) … 最後に入れたものが、最初に出る。積んだ皿のイメージだ。
- キュー(FIFO) … 最初に入れたものが、最初に出る。レジの行列のイメージだ。
また、配列とリストも別もの。配列は番号で一発アクセスできるのが得意、リストは挿入・削除が得意。「配列とリストは同じ」と思い込むと誤りだ。
わかりやすく言い換えると
身近なたとえで整理しよう。
スタックは、「積んだ皿」のイメージ。最後に積んだ皿を、最初に取る(後入れ先出し)。キューは、「レジの行列」のイメージ。先に並んだ人が、先に進む(先入れ先出し)。つまり、出る順番が逆だ。
配列とリストの違いは、「番号つきのロッカー(配列)」と「数珠つなぎ(リスト)」。要するに、番号で探しやすいか、つなぎ替えやすいか、だ。
試験のツボ
🔴 一番出る:スタックとキューの違い
①スタック=後入れ先出し(LIFO)。積んだ皿のイメージ
②キュー=先入れ先出し(FIFO)。レジの行列のイメージ
🔴 次に出る:配列とリストの違い
①配列=番号で一発アクセスが得意
②リスト=挿入・削除が得意(場所まで順にたどる)
🟡 押さえると安定:データ構造の正体
①データを、どんな形で持っておくか(整理のしかた)
②整理のしかたで、得意・不得意が変わる
よくある間違い
①「スタックとキューは、出し入れの順が同じだ」→ ✗ スタックは後入れ先出し(LIFO)、キューは先入れ先出し(FIFO)。順が逆。
②「配列とリストは、まったく同じデータ構造だ」→ ✗ 配列は番号で一発アクセスが得意、リストは挿入・削除が得意。別もの。
③「スタックは、最初に入れたものが最初に出る」→ ✗ 最初に入れたものが先に出るのはキュー。スタックは、後に入れたものが先に出る。
試験での出題パターン
実際の問題でたしかめてみよう。
オリジナル問題1(データ構造の正体)
データ構造に関する次の記述のうち、最も適切なものはどれか。
- データを、どんな形で持っておくか(整理のしかた)のことである
- 社員の出退勤を記録して、毎月の給与を計算していくしくみである
- 取引先へ毎月の請求書を郵送する、決まった事務作業である
- 完成したシステムを宣伝して、より多く売る広告活動である
解答は 1 だぱん。
データ構造は、データを、どんな形で持っておくか(整理のしかた)なんだぱん。しまい方で、得意・不得意が変わるんだぱん。
選択肢2は給与計算、選択肢3は請求書の事務、選択肢4は広告で、どれも違うぱん。
| 選択肢 | 判定 | 理由 |
|---|---|---|
| 1 | ✓ | データの持ち方(整理のしかた)で正しい |
| 2 | ✗ | 給与計算のしくみではない |
| 3 | ✗ | 請求書の事務の話 |
| 4 | ✗ | 広告活動ではない |
オリジナル問題2(スタック)
スタックに関する次の記述のうち、最も適切なものはどれか。
- 社員の給与を計算する順番に、データを出し入れするものだとされている
- 取引先へ請求書を郵送する順に、データを出し入れするものである
- 先に入れたものが先に出る(先入れ先出し)データ構造である
- 後に入れたものが先に出る(後入れ先出し・LIFO)データ構造である
解答は 4 だぱん。
スタックは、後に入れたものが先に出る(後入れ先出し・LIFO)んだぱん。積んだ皿のイメージだぱん。選択肢3の「先入れ先出し」はキューの説明だぱん。
選択肢1の給与、選択肢2の請求書、選択肢3のキューの説明は、いずれも違うぱん。
| 選択肢 | 判定 | 理由 |
|---|---|---|
| 1 | ✗ | 給与計算の順ではない |
| 2 | ✗ | 請求書の郵送の順ではない |
| 3 | ✗ | 先入れ先出しはキュー |
| 4 | ✓ | 後入れ先出し(LIFO)で正しい |
オリジナル問題3(キュー)
キューに関する次の記述のうち、最も適切なものはどれか。
- 後に入れたものが先に出る(後入れ先出し)データ構造である
- 先に入れたものが先に出る(先入れ先出し・FIFO)データ構造である
- 社員の給与を計算する順番に、データを出し入れするものだとされている
- 取引先へ請求書を郵送する順に、データを出し入れするものである
解答は 2 だぱん。
キューは、先に入れたものが先に出る(先入れ先出し・FIFO)んだぱん。レジの行列のイメージだぱん。選択肢1の「後入れ先出し」はスタックの説明だぱん。
選択肢1のスタックの説明、選択肢3の給与、選択肢4の請求書は、いずれも違うぱん。
| 選択肢 | 判定 | 理由 |
|---|---|---|
| 1 | ✗ | 後入れ先出しはスタック |
| 2 | ✓ | 先入れ先出し(FIFO)で正しい |
| 3 | ✗ | 給与計算の順ではない |
| 4 | ✗ | 請求書の郵送の順ではない |
まとめ
押さえどころ
- 🔴 データ構造 = データを、どんな形で持っておくか(整理のしかた)。
- 🔴 スタックとキュー = スタックは後入れ先出し(LIFO)、キューは先入れ先出し(FIFO)。順が逆。
- 🟡 配列とリスト = 配列は番号で一発アクセスが得意、リストは挿入・削除が得意。
次に学ぶ
- アルゴリズム ── 問題を解く手順。データ構造とあわせて、効率よく問題を解く。
- 計算量 ── アルゴリズムやデータ構造の効率を表す。速さやメモリの目安になる。
執筆: SikakuQuest編集部