基本情報技術者試験の科目Bで「計算量」や「ポインタ操作」とセットで出題されるのが、配列(Array)と連結リスト(Linked List)の構造の違いです!
「配列と連結リストって何が違うの?」
「途中に要素を挿入・削除するとき、裏でどんな処理が行われているのかイメージが湧かない…」
そんな受験生のために、当サイトでは「配列の要素ずらし(シフト操作)」と「連結リストのポインタ(参照)つなぎ替え」を1行1処理で体感できるビジュアルシミュレーターを用意しました!
まずはボタンを押して、両者の「要素挿入」の挙動の違いを確認してみましょう。
1. 【動く図解】配列と連結リストの「要素挿入」トレースシミュレーター
下の「進む ➔」ボタンを押すと、配列の「要素を1つずつ右にずらす処理」と、連結リストの「矢印(ポインタ)を繋ぎ替える処理」の違いが視覚的にわかります。
構造の視覚化
2. 配列(Array)の特徴と限界
配列は、メモリ上の「連続した領域」にデータを並べるデータ構造です。
配列のメリット:ランダムアクセスが爆速
「先頭から○番目の場所」が計算で一発指定できるため、arr[100] のように任意の要素へ一瞬でアクセスできます。
配列のデメリット:途中の挿入・削除が遅い
シミュレーターで確認した通り、途中に新しい要素を入れるには後ろの要素を1つずつ手前にずらす(シフトする)必要があります。データ数が1万個あれば、最大1万回の移動処理が発生します。
3. 連結リスト(Linked List)の特徴と利点
連結リストは、データ本体と「次のデータの場所(ポインタ/参照)」をセットにした「ノード」を鎖のようにつなぐ構造です。
連結リストのメリット:挿入・削除が爆速
挿入場所さえ決まっていれば、前後のポインタ(参照)を付け替えるだけで完了します。他の要素を移動させる必要が一切ありません。
連結リストのデメリット:ランダムアクセスが遅い
配列のように「100番目の要素」を一発指定できません。先頭(head)からポインタを1つずつ辿っていく(head -> next -> next...)必要があるためです。
4. 科目Bでの出題パターン:要素のポインタ繋ぎ替え順序
科目Bで最も狙われるのが、「ポインタを書き換える順番」の引っかけ問題です。
【絶対にやってはいけない間違えた順番】
先に node10.next = newNode を行ってしまうと、元々つながっていた [20] への参照が失われ、後ろのリスト全体が行方不明(メモリリーク)になってしまいます!
【正しい順番】
必ず「新ノードの参照を先に繋ぐ (newNode.next = node10.next)」 ➔ 「手前ノードの参照を付け替える (node10.next = newNode)」 という手順を踏む必要があります。科目Bの選択肢でコードの順序を問われたらここをチェックしましょう。
まとめ:配列と連結リストの性能比較テーブル
| 操作 | 配列(Array) | 連結リスト(Linked List) |
|---|---|---|
| ランダムアクセス(指定位置の参照) | (爆速) | (遅い) |
| 途中の挿入・削除 | (シフトが必要) | (繋ぎ替えのみ) |
| メモリ領域 | 連続した領域が必要 | 離れたメモリでもポインタで連結可 |
シミュレーターの右上プルダウンで「配列」と「連結リスト」を何度も切り替えて動きをイメージし、科目Bのポインタ問題を完答できるようにしましょう!

コメント