配列・リストとは?データをまとめて入れる一番基本のしくみ

公開: 更新: カテゴリ: テクノロジ系

30秒で結論

配列・リストとは(全体像)

配列とリストは、どちらもたくさんのデータを順番に並べて持つしくみ。ただし、中身の持ち方が違うため、得意・不得意が逆になっている。

この「持ち方の違い」が、速さ(どの操作が得意か)の違いを生む。だから、やりたいことに合わせて選ぶのがポイントだ。


詳しく:得意・不得意の表だけ覚えれば戦える

ここが記事の心臓部。2つの得意・不得意を並べる。

配列と連結リストの違い

配列連結リスト
番号で取り出す速い(一発)遅い(先頭からたどる)
途中への挿入・削除遅い(後ろをずらす)速い(つなぎ替えるだけ)
持ち方すきまなく連続つながりで数珠つなぎ

配列は、番号を言えばその場所に一発でジャンプできる(要素が増えても速さは変わらない)。ただし途中にデータを挿し込むには、後ろの要素を全部ずらす必要があり遅い。

連結リストは逆で、間への挿し込みや削除はつなぎ替えるだけで速い。ただし「5番目」を取り出すには先頭から順にたどる必要があり遅い(要素が増えるほど時間がかかる)。つまり、得意なことが配列と連結リストでちょうど逆になっている、というわけだ。

配列の2タイプ

タイプ内容
静的配列サイズが固定
動的配列必要に応じて伸ばせる(番号での一発アクセスは速いまま)

なお、伸ばせる動的配列(プログラミング言語のリスト型など)も、中身は配列なので番号アクセスは速い。「可変長だから連結リストと同じ」と思い込まないのが大事だ。

わかりやすく言い換えると

要するに、配列は「番号つきの駐車場」、連結リストは「鎖でつないだボート」だ。

配列(駐車場) … 「12番」と言えば一発でその区画に行ける。でも、間に1台ねじ込むには、後ろの車を全部ずらす必要がある。

連結リスト(ボート) … 順番にしかたどれないけれど、間に新しいボートを1艘はさむのは、ロープをつなぎ替えるだけで簡単。

だから「番号で取り出すことが多いなら配列」「途中の出し入れが多いなら連結リスト」と、やりたいことで選ぶのがコツ、というわけだね。


試験のツボ

🔴 一番出る:得意・不得意の逆の関係

①配列=番号で取り出すのが速い、途中の挿入・削除は遅い

②連結リスト=途中の挿入・削除が速い、番号アクセスは遅い

🔴 次に出る:使い分け

①番号で取り出すことが多い→配列

②先頭・末尾・途中の出し入れが多い→連結リスト

🟡 押さえると安定:動的配列

①静的配列はサイズ固定、動的配列は伸ばせる

②動的配列でも番号アクセスは速い(連結リストとは別)


よくある間違い

「配列と連結リストは同じもので、速さも変わらない」→ ✗  得意・不得意が逆。番号アクセスは配列が速く、途中の出し入れはリストが速い。

「動的配列は連結リストと同じで、番号アクセスは遅い」→ ✗  動的配列は中身が配列なので、番号アクセスは速いまま。

「連結リストは番号を指定すれば一発で取り出せる」→ ✗  連結リストは先頭から順にたどるので、番号アクセスは遅い。


試験での出題パターン

実際の問題でたしかめてみよう。

オリジナル問題1(得意・不得意)

📝 オリジナル問題 1 配列とリストの得意・不得意

配列と連結リストの特徴に関する次の記述のうち、正しいものはどれか。

  1. 配列は途中への挿入が速く、連結リストは番号での取り出しが速いものである
  2. 配列は番号での取り出しが速く、連結リストは途中への挿入・削除が速い
  3. 配列も連結リストも、どの操作の速さもまったく同じで違いはないとされる
  4. 配列は番号での取り出しが遅く、途中への挿入もどちらも遅いものである
オーエスペン
オーエスペン 解答・解説

解答は 2 だよ。

配列は番号での取り出しが速く、連結リストは途中への挿入・削除が速いんだ。得意なことが逆になっている、という関係をまず押さえてね。

選択肢1は配列と連結リストの得意が逆。選択肢3は「違いがない」が誤り。選択肢4は「配列はどちらも遅い」が誤りで、番号アクセスは速いよ。

選択肢判定理由
1得意なことが逆
2配列=番号アクセス・リスト=挿入が速い
3得意・不得意に違いがある
4配列は番号アクセスが速い

オリジナル問題2(使い分け)

📝 オリジナル問題 2 配列とリストの使い分け

配列と連結リストの使い分けに関する次の記述のうち、正しいものはどれか。

  1. どんな場合でも配列のほうが優れているので、連結リストは使う必要がない
  2. 番号での取り出しが多い場面では、配列より連結リストのほうが向いている
  3. 途中の挿入・削除が多い場面では、連結リストより配列のほうが向いている
  4. 番号で取り出すことが多いなら配列、出し入れが多いなら連結リストを使う
オーエスペン
オーエスペン 解答・解説

解答は 4 だよ。

番号で取り出すことが多いなら配列、途中の出し入れが多いなら連結リストを選ぶんだ。やりたいことに合わせて使い分けるのがコツだね。

選択肢1は「配列だけでよい」が誤り。選択肢2は番号アクセスにリストを勧めていて誤り。選択肢3は挿入に配列を勧めていて誤りだよ。

選択肢判定理由
1用途で使い分ける
2番号アクセスは配列が向く
3途中の出し入れは連結リストが向く
4番号→配列、出し入れ→リスト

オリジナル問題3(動的配列)

📝 オリジナル問題 3 動的配列の特徴

動的配列に関する次の記述のうち、正しいものはどれか。

  1. 動的配列はサイズが固定で、あとから要素を増やすことはできないものである
  2. 動的配列は連結リストと同じしくみで、番号での取り出しは遅いものである
  3. 動的配列は必要に応じて伸ばせるが、番号での取り出しは速いまま保たれる
  4. 動的配列は番号での取り出しができず、先頭から順にたどるしかないものだ
オーエスペン
オーエスペン 解答・解説

解答は 3 だよ。

動的配列は必要に応じて伸ばせるけれど、中身は配列だから番号での取り出しは速いままなんだ。可変長でも連結リストとは別もの、ってところがポイントだね。

選択肢1は「サイズ固定」で静的配列の説明。選択肢2は「連結リストと同じ・遅い」が誤り。選択肢4は「番号アクセスできない」が誤りだよ。

選択肢判定理由
1サイズ固定は静的配列
2中身は配列で番号アクセスは速い
3伸ばせるが番号アクセスは速いまま
4番号で取り出せる

まとめ

押さえどころ

次に学ぶ


執筆: SikakuQuest編集部

勉強は、クエストになった。

資格の勉強を、冒険に変えるRPG学習アプリ

App Storeで見る