こんにちは。今日は、プログラミングやデータ構造でよく登場する「配列とリスト」について学びました!
この記事で分かること(目次)
📦 配列(Array)とは?
■ 配列ってなに?
同じ型のデータを、ひとまとめにして順番に並べたものです。
例えば、5人分のテスト点数(整数)を記録する場合に便利!
int scores[5] = {80, 90, 75, 60, 85};
- 添字(インデックス)を使ってアクセス:
scores[0]は 80、scores[4]は 85 - 配列の要素数は固定(最初にサイズを決める)
■ 配列の特徴
| 特徴 | 説明 |
|---|---|
| サイズ固定 | 宣言時に決めたサイズしか使えない |
| 同じ型 | すべて同じデータ型(int, char など) |
| アクセス高速 | インデックスで一発アクセス可能 |
🔁 リスト(List)とは?
■ リストってなに?
配列と似ているけど、柔軟な構造を持ったデータの集まり。特に「連結リスト(Linked List)」という構造が有名です。
- 各要素が「データ本体+次の要素へのポインタ」で構成される
- 要素の追加・削除が簡単(メモリを動かさない)
■ 単方向リストの図(イメージ)
[10 | →] → [20 | →] → [30 | NULL]
このように、各要素が次の要素を「指している(リンク)」ので「連結リスト」と呼ばれます。
■ 配列とリストの違いまとめ
| 比較項目 | 配列(Array) | リスト(List) |
|---|---|---|
| 要素数 | 固定 | 可変(自由に増減可能) |
| 挿入・削除 | 難しい(位置がズレる) | 簡単(リンクの張り替え) |
| アクセス速度 | 速い(ランダムアクセス可) | 遅い(順にたどる必要あり) |
| メモリ配置 | 連続 | 非連続(ポインタで管理) |
💡 基本情報技術者試験での過去問(配列・リスト)
📘 過去問例①(令和元年度秋 午前)
問題:
次のC言語のプログラムに関する記述のうち、正しいものはどれか。
int a[5] = {1, 2, 3, 4, 5};
printf("%d", a[2]);
選択肢:
ア. 1が表示される
イ. 2が表示される
ウ. 3が表示される
エ. 5が表示される
👉 正解:ウ(3が表示される)
→ a[2]は、3番目の要素なので、値は3です(0から数える!)
📘 過去問例②(平成30年度 春 午前)
問題:
単方向リストにおいて、リストの先頭から4番目の要素を削除する操作に関する記述として、最も適切なものはどれか。
選択肢:
ア. 削除した要素の前のポインタを次の要素に向け直せばよい
イ. 削除した要素の後のポインタを前の要素に向け直せばよい
ウ. 削除した要素以外はすべて書き換える必要がある
エ. 単方向リストでは要素の削除はできない
👉 正解:ア
→ 単方向リストでは、前のノードが「次のノード」を覚えているので、**「前のノードのポインタをスキップさせる」**ことで削除できます。
✍️ ちょっと練習問題!
int a[4] = {1, 3, 5, 7};のa[3]の値は?
→ 答え:- 単方向リストで、2番目の要素を削除したいとき、変更が必要なポインタはどれ?
✅ 答え:
a[3]= 7(0, 1, 2, 3番目)- 「1番目のノードのポインタ」を、3番目のノードに向ければOK!
📝 今日のまとめ
- 配列:同じ型のデータを並べた固定サイズの構造。アクセス高速!
- リスト:柔軟な追加・削除が可能な構造。ポインタでつなぐ!
- 試験では、インデックスやポインタ操作に関する問題がよく出る!
