PR

【動く図解】基本情報科目Bの「配列 vs 連結リスト」を攻略!要素の挿入・削除とポインタ(参照)つなぎ替えシミュレーター

基本情報技術者試験の科目Bで「計算量」や「ポインタ操作」とセットで出題されるのが、配列(Array)と連結リスト(Linked List)の構造の違いです!

「配列と連結リストって何が違うの?」
「途中に要素を挿入・削除するとき、裏でどんな処理が行われているのかイメージが湧かない…」

そんな受験生のために、当サイトでは「配列の要素ずらし(シフト操作)」と「連結リストのポインタ(参照)つなぎ替え」を1行1処理で体感できるビジュアルシミュレーターを用意しました!

まずはボタンを押して、両者の「要素挿入」の挙動の違いを確認してみましょう。


1. 【動く図解】配列と連結リストの「要素挿入」トレースシミュレーター

下の「進む ➔」ボタンを押すと、配列の「要素を1つずつ右にずらす処理」と、連結リストの「矢印(ポインタ)を繋ぎ替える処理」の違いが視覚的にわかります。

実行中のコード(1行1処理) データ構造:
挿入位置: index 1 挿入する値: 99
「進む」を押して実行

構造の視覚化

説明テキスト

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のポインタ問題を完答できるようにしましょう!

コメント

タイトルとURLをコピーしました