配列
まず結論
配列は同じ型のデータを連続したメモリ領域に並べたデータ構造です。インデックス(添字)で各要素に直接アクセスでき、アクセスは常に高速(O(1))。科目Bで最もよく登場するデータ構造です。
配列のイメージ
配列はメモリ上に連続して並んだ箱のようなもの。各箱に番号(インデックス)がついています。
配列名: scores
scores[0]
85
scores[1]
72
scores[2]
91
scores[3]
68
scores[4]
95
インデックスは 0 から始まる! → 5要素なら 0〜4
0始まりに注意!:多くの言語でインデックスは0から始まります。IPAの擬似コードでは1始まりの場合もあるので問題文で確認すること。
配列の基本操作と擬似コード
// 配列 a に 5 つの値を設定して合計を求める
a ← {10, 20, 30, 40, 50} // 配列の初期化
goukei ← 0
i を 1 から 5 まで繰り返す
goukei ← goukei + a[i] // a[1]+a[2]+...+a[5]
繰り返し終わり
「合計:」, goukei を表示する // → 150
アクセス O(1)
インデックスを使えば一瞬でアクセスできる。a[3] → 直接4番目の要素を取得。配列の最大の強み。
挿入・削除 O(n)
途中に挿入・削除するとそれ以降の要素をずらす必要がある。要素数nが多いほど遅くなる。
2次元配列(行列)
行と列でデータを管理する。座席表・スプレッドシート・画像データに使用。
[1]
[2]
[3]
[1]
1
2
3
[2]
4
5
6
matrix[2][2] = 5(2行2列目)
🎯 試験での出方
- 「配列の要素へのアクセス計算量」→ O(1)(インデックスで直接アクセス)
- 「n個の要素を持つ配列の最後のインデックス」→ n-1(0始まりの場合)
- 擬似コードで配列をループで処理する問題が科目Bで最頻出
- 配列の合計・最大値・最小値を求めるアルゴリズムのトレース問題
⚠️ よくある間違い
- 「配列のインデックスは1から」→ △ 多くの言語は0始まり。IPAの擬似コードでは1始まりのことも
- 「n要素配列の最後はa[n]」→ ✗ 0始まりならa[n-1]。問題文を必ず確認
- 「配列はどこにでも高速に挿入できる」→ ✗ 挿入・削除はO(n)。アクセスだけがO(1)
✍️ 確認クイズ
Q1. 配列の要素にインデックスを使ってアクセスする場合の計算量はどれか。
✅ 正解は①。配列はインデックスで直接アドレスを計算してアクセスできるため、要素数nに関係なくO(1)(定数時間)でアクセスできます。
Q2. 要素数5の配列をインデックス0始まりで管理する場合、最後の要素のインデックスはどれか。
✅ 正解は②。インデックス0始まりで要素数nの配列の最後のインデックスはn-1。5要素なら0,1,2,3,4 → 最後は4。
Q3. 配列の途中に要素を挿入する操作の計算量はどれか。
✅ 正解は②。配列の途中に挿入する場合、挿入位置以降の要素を全て1つずつずらす必要があるため、最悪の場合O(n)になります。
Q4. 配列の末尾要素を削除する操作の計算量はどれか。
✅ 正解は①。末尾要素の削除は他の要素をずらす必要がないためO(1)(定数時間)です。一方、先頭や途中の削除は後続の全要素をシフトする必要があるためO(n)かかります。末尾への追加もO(1)です。
Q5. 配列とリスト(連結リスト)を比較したとき、配列の優れている点はどれか。
✅ 正解は③。配列は連続したメモリ領域に格納されているため、a[5]のようにインデックスで直接アクセスできる(O(1))。リスト(連結リスト)はランダムアクセスがO(n)ですが、途中の挿入・削除はO(1)(前後のポインタを変えるだけ)で配列より速いです。
Sponsor Link