配列・リストとは(全体像)
配列とリストは、どちらもたくさんのデータを順番に並べて持つしくみ。ただし、中身の持ち方が違うため、得意・不得意が逆になっている。
- 配列 … データをすきまなく連続して並べる。何番目かを指定すれば一発で取り出せる。
- 連結リスト … 各データが「次はここ」という案内(つながり)を持って数珠つなぎになっている。
この「持ち方の違い」が、速さ(どの操作が得意か)の違いを生む。だから、やりたいことに合わせて選ぶのがポイントだ。
詳しく:得意・不得意の表だけ覚えれば戦える
ここが記事の心臓部。2つの得意・不得意を並べる。
配列と連結リストの違い
| 配列 | 連結リスト | |
|---|---|---|
| 番号で取り出す | 速い(一発) | 遅い(先頭からたどる) |
| 途中への挿入・削除 | 遅い(後ろをずらす) | 速い(つなぎ替えるだけ) |
| 持ち方 | すきまなく連続 | つながりで数珠つなぎ |
配列は、番号を言えばその場所に一発でジャンプできる(要素が増えても速さは変わらない)。ただし途中にデータを挿し込むには、後ろの要素を全部ずらす必要があり遅い。
連結リストは逆で、間への挿し込みや削除はつなぎ替えるだけで速い。ただし「5番目」を取り出すには先頭から順にたどる必要があり遅い(要素が増えるほど時間がかかる)。つまり、得意なことが配列と連結リストでちょうど逆になっている、というわけだ。
配列の2タイプ
| タイプ | 内容 |
|---|---|
| 静的配列 | サイズが固定 |
| 動的配列 | 必要に応じて伸ばせる(番号での一発アクセスは速いまま) |
なお、伸ばせる動的配列(プログラミング言語のリスト型など)も、中身は配列なので番号アクセスは速い。「可変長だから連結リストと同じ」と思い込まないのが大事だ。
わかりやすく言い換えると
要するに、配列は「番号つきの駐車場」、連結リストは「鎖でつないだボート」だ。
①配列(駐車場) … 「12番」と言えば一発でその区画に行ける。でも、間に1台ねじ込むには、後ろの車を全部ずらす必要がある。
②連結リスト(ボート) … 順番にしかたどれないけれど、間に新しいボートを1艘はさむのは、ロープをつなぎ替えるだけで簡単。
だから「番号で取り出すことが多いなら配列」「途中の出し入れが多いなら連結リスト」と、やりたいことで選ぶのがコツ、というわけだね。
試験のツボ
🔴 一番出る:得意・不得意の逆の関係
①配列=番号で取り出すのが速い、途中の挿入・削除は遅い
②連結リスト=途中の挿入・削除が速い、番号アクセスは遅い
🔴 次に出る:使い分け
①番号で取り出すことが多い→配列
②先頭・末尾・途中の出し入れが多い→連結リスト
🟡 押さえると安定:動的配列
①静的配列はサイズ固定、動的配列は伸ばせる
②動的配列でも番号アクセスは速い(連結リストとは別)
よくある間違い
①「配列と連結リストは同じもので、速さも変わらない」→ ✗ 得意・不得意が逆。番号アクセスは配列が速く、途中の出し入れはリストが速い。
②「動的配列は連結リストと同じで、番号アクセスは遅い」→ ✗ 動的配列は中身が配列なので、番号アクセスは速いまま。
③「連結リストは番号を指定すれば一発で取り出せる」→ ✗ 連結リストは先頭から順にたどるので、番号アクセスは遅い。
試験での出題パターン
実際の問題でたしかめてみよう。
オリジナル問題1(得意・不得意)
配列と連結リストの特徴に関する次の記述のうち、正しいものはどれか。
- 配列は途中への挿入が速く、連結リストは番号での取り出しが速いものである
- 配列は番号での取り出しが速く、連結リストは途中への挿入・削除が速い
- 配列も連結リストも、どの操作の速さもまったく同じで違いはないとされる
- 配列は番号での取り出しが遅く、途中への挿入もどちらも遅いものである
解答は 2 だよ。
配列は番号での取り出しが速く、連結リストは途中への挿入・削除が速いんだ。得意なことが逆になっている、という関係をまず押さえてね。
選択肢1は配列と連結リストの得意が逆。選択肢3は「違いがない」が誤り。選択肢4は「配列はどちらも遅い」が誤りで、番号アクセスは速いよ。
| 選択肢 | 判定 | 理由 |
|---|---|---|
| 1 | ✗ | 得意なことが逆 |
| 2 | ✓ | 配列=番号アクセス・リスト=挿入が速い |
| 3 | ✗ | 得意・不得意に違いがある |
| 4 | ✗ | 配列は番号アクセスが速い |
オリジナル問題2(使い分け)
配列と連結リストの使い分けに関する次の記述のうち、正しいものはどれか。
- どんな場合でも配列のほうが優れているので、連結リストは使う必要がない
- 番号での取り出しが多い場面では、配列より連結リストのほうが向いている
- 途中の挿入・削除が多い場面では、連結リストより配列のほうが向いている
- 番号で取り出すことが多いなら配列、出し入れが多いなら連結リストを使う
解答は 4 だよ。
番号で取り出すことが多いなら配列、途中の出し入れが多いなら連結リストを選ぶんだ。やりたいことに合わせて使い分けるのがコツだね。
選択肢1は「配列だけでよい」が誤り。選択肢2は番号アクセスにリストを勧めていて誤り。選択肢3は挿入に配列を勧めていて誤りだよ。
| 選択肢 | 判定 | 理由 |
|---|---|---|
| 1 | ✗ | 用途で使い分ける |
| 2 | ✗ | 番号アクセスは配列が向く |
| 3 | ✗ | 途中の出し入れは連結リストが向く |
| 4 | ✓ | 番号→配列、出し入れ→リスト |
オリジナル問題3(動的配列)
動的配列に関する次の記述のうち、正しいものはどれか。
- 動的配列はサイズが固定で、あとから要素を増やすことはできないものである
- 動的配列は連結リストと同じしくみで、番号での取り出しは遅いものである
- 動的配列は必要に応じて伸ばせるが、番号での取り出しは速いまま保たれる
- 動的配列は番号での取り出しができず、先頭から順にたどるしかないものだ
解答は 3 だよ。
動的配列は必要に応じて伸ばせるけれど、中身は配列だから番号での取り出しは速いままなんだ。可変長でも連結リストとは別もの、ってところがポイントだね。
選択肢1は「サイズ固定」で静的配列の説明。選択肢2は「連結リストと同じ・遅い」が誤り。選択肢4は「番号アクセスできない」が誤りだよ。
| 選択肢 | 判定 | 理由 |
|---|---|---|
| 1 | ✗ | サイズ固定は静的配列 |
| 2 | ✗ | 中身は配列で番号アクセスは速い |
| 3 | ✓ | 伸ばせるが番号アクセスは速いまま |
| 4 | ✗ | 番号で取り出せる |
まとめ
押さえどころ
- 🔴 得意・不得意の逆の関係 = 配列は番号アクセスが速い、連結リストは途中の挿入・削除が速い。
- 🔴 使い分け = 番号で取り出すことが多いなら配列、途中の出し入れが多いなら連結リスト。
- 🟡 動的配列 = 伸ばせるが中身は配列。番号アクセスは速いまま(連結リストとは別)。
次に学ぶ
- スタックとキュー ── 配列やリストを土台に作る、出し入れの順番を決めたデータ構造。基本構造の次のステップ。
- 計算量(オーダー) ── 「番号アクセスが速い/遅い」を表す考え方。配列とリストの違いをきっちり比べられるようになる。
執筆: SikakuQuest編集部