基本情報の配列・リスト・ポインタは、科目Bのアルゴリズム問題でつまずきやすい論点です。用語だけなら覚えられても、問題文の表や擬似言語に出てきた瞬間に「どこを見ればいいのか分からない」と感じる人は多いかなと思います。
この記事では、基本情報の配列・リスト・ポインタを、試験で解くための目線に絞って整理します。プログラミング経験が少ない人でも、配列は番号で直接見る、リストはポインタを順にたどる、という違いから押さえればかなり読みやすくなります。
- 配列とリストの違いを科目B目線で整理できる
- ポインタを「次の場所を示す情報」として読める
- 挿入・削除・探索で何を追うかが分かる
- 表を書いてミスを減らす解き方を確認できる
基本情報の配列とリストの違い

配列は番号で直接見る
配列は、複数のデータを順番に並べて、添字や要素番号で取り出すデータ構造です。基本情報の問題では、A[1]、A[i]、得点表[行][列]のように、番号を使って値を読む形で出てきます。ここで大切なのは、配列を「箱が横に並んでいるもの」として見ることです。何番目の箱に何が入っているかを表に書ければ、問題文の処理をかなり追いやすくなります。
科目Bでは、配列そのものの説明よりも、配列を使った処理の結果を問われることが多いです。例えば、繰返しでiを1ずつ増やしながらA[i]を調べる、条件に合う要素だけ別の配列に入れる、二次元配列の行と列を入れ替える、といった形ですね。つまり「配列とは何か」を暗記するだけでは足りず、添字の変化と中身の変化を同時に見る必要があります。
注意したいのは、配列の要素番号が1から始まる問題と、0から始まるプログラミング言語の感覚を混ぜないことです。基本情報の擬似言語やサンプル問題では、問題ごとに前提が示されます。普段PythonやJavaScriptを触っている人ほど、手ぐせで0番目を考えてしまうことがあります。試験中は最初に「添字はどこから始まるか」を丸で囲むくらいでちょうどいいです。
| 見るもの | 確認すること |
|---|---|
| 添字 | 今どの番号を見ているか |
| 値 | その番号の箱に何が入っているか |
| 更新 | 処理後にどの箱が変わったか |
配列が苦手な人は、問題文を読んですぐ答えを探すより、まず小さな表を作る方が早いです。左に添字、右に値を書き、繰返しのたびに変わった場所だけ更新します。この作業は遠回りに見えますが、選択肢を感覚で選ばなくなるので、科目Bではかなり効きます。
リストは順にたどる
リストは、データ同士が「次はここ」とつながっているデータ構造です。基本情報では、単方向リスト、双方向リスト、環状リストのような形で出てくることがあります。配列のように何番目と指定してすぐ取り出すというより、先頭から次、次、次とたどって目的のデータに到達するイメージです。ここが配列との大きな違いです。
試験でリストが出ると、表の中に「データ」と「次の要素を示す値」が並んでいることがあります。この「次の要素を示す値」がポインタです。例えば、セル3の次がセル7、セル7の次がセル2、というように、物理的な表の並び順と実際のリストの順番が一致しないこともあります。だからリスト問題では、表の上から順番に読むのではなく、ポインタが示す順番に読みます。
- 先頭の位置を確認する
- 現在位置のデータを見る
- 次ポインタの値を見る
- ポインタが示す要素へ移動する
リストを学ぶときに混乱しやすいのは、「表の見た目」と「リストの順序」が違う点です。表では上から1、2、3と並んでいても、実際のつながりは3→7→2のようになっているかもしれません。科目Bの問題は、ここを読み落とすと一気に崩れます。問題文に「先頭」「次」「末尾」「NULL」「空」を示す言葉があれば、まずそこを拾ってください。
基本情報の科目Bでは、リストの種類名を問うだけではなく、追加・削除・探索の途中でポインタがどう変わるかを問われます。リストが出たら、まず「今いる場所」「次に行く場所」「終わりの条件」を分けて読む。この3つを押さえれば、長い擬似言語でも処理の方向を見失いにくくなります。
ポインタは次の場所
ポインタという言葉を見ると、C言語の難しい概念を想像して身構える人がいます。ただ、基本情報の科目Bでまず必要なのは、ポインタを「次に見る場所を示す情報」として扱うことです。住所のようなもの、矢印のようなもの、と考えて構いません。リストの各要素は、データだけでなく、次の要素を指すポインタを持っていることがあります。
例えば、ある要素のnextが5なら、次に見るのは5番の要素です。nextが0やNULLなら、そこが終端です。問題によって表記は違いますが、意味は「次はどこか」です。ここを理解すると、リスト問題はかなり単純になります。現在位置を見て、データを確認し、nextを読んで、次の位置に移動する。この繰り返しです。
ポインタで間違えやすいのは、データの値とポインタの値を混ぜてしまうことです。例えば、データが80で、nextが4なら、80はその要素が持つ値で、4は次に見る要素の番号です。この2つを同じ列として読んでしまうと、処理の流れが壊れます。問題用紙やメモでは、データ列とポインタ列を別の色や別の記号で見分けるといいですね。
| 列 | 意味 | 読み方 |
|---|---|---|
| data | 要素が持つ値 | 条件判定や出力に使う |
| next | 次の要素の位置 | 移動先として使う |
| prev | 前の要素の位置 | 双方向リストで使う |
基本情報の配列・リスト・ポインタを一緒に学ぶ理由は、問題の中で組み合わされるからです。リストの実体を配列で表し、配列の各行にデータとポインタを入れるような出題があります。この場合、見た目は配列ですが、読む順番はリストです。ここを切り替えられると、科目Bのデータ構造問題がかなり安定します。
挿入と削除の差
配列とリストの違いが試験で問われやすい場面が、データの挿入と削除です。配列は番号で直接アクセスしやすい一方で、途中に要素を入れると後ろの要素をずらす必要があります。途中の要素を削除する場合も、空いた場所を埋めるために後ろを前へ詰める処理が必要です。だから配列は「探すのは分かりやすいが、途中の挿入・削除はずらしが発生する」と覚えるといいです。
リストは逆に、先頭から順にたどらないと目的の場所に行きにくいです。ただし、挿入や削除ではポインタのつなぎ替えが中心になります。新しい要素を間に入れるなら、前の要素のnextを新しい要素へ向け、新しい要素のnextを次の要素へ向ける。削除なら、削除したい要素を飛ばして、前の要素から次の要素へつなぎます。データ全体をずらすというより、矢印を変えるイメージですね。
ただし、リストなら必ず簡単という話ではありません。目的の位置を見つけるまでは、先頭から順にたどる必要があります。試験問題では、探索のための繰返し、条件に一致したときの挿入、削除後のポインタ更新が一つの流れで書かれることがあります。このとき、処理を頭の中だけで追うと、現在位置と前の位置を取り違えやすいです。
| 構造 | 得意 | 注意点 |
|---|---|---|
| 配列 | 番号で直接アクセス | 途中挿入・削除でずらしが発生 |
| リスト | ポインタのつなぎ替え | 目的位置まで順にたどる |
基本情報では、配列とリストのどちらが優れているかを単純に選ぶより、「この処理では何が大変か」を問われることが多いです。途中への追加が多いならリストの考え方が効きますし、n番目をすぐ見たいなら配列が分かりやすいです。この比較軸を持っておくと、選択肢の文章を読んだときに判断しやすくなります。
科目Bで問われる形
基本情報の科目Bでは、配列・リスト・ポインタが単独の用語問題として出るというより、擬似言語の中で処理対象として出てきます。IPAが公開している科目Bサンプル問題でも、アルゴリズムとプログラミングの範囲には、型、変数、配列、繰返し、再帰、スタック、キュー、連結リスト、整列などが含まれます。つまり、配列やリストは科目Bの土台です。
よくある形は、表で与えられたデータを擬似言語がどう処理するかを追う問題です。配列なら、iやjの変化に合わせて、どの要素が参照されるかを見ます。リストなら、先頭ポインタから始めて、nextをたどった順番でデータを確認します。どちらも「問題文を読む力」だけではなく、「手を動かして状態を書き換える力」が必要です。
- 配列の添字がどう変わるか
- リストの先頭と末尾がどこか
- ポインタ更新の前後でつながりがどう変わるか
- 繰返しの終了条件が何か
既に科目B全体の進め方を確認したい場合は、基本情報の科目B対策|勉強順と合格ラインも合わせて読むと流れをつかみやすいです。アルゴリズム全体の勉強法は、基本情報のアルゴリズム対策|科目Bの解き方で整理しています。
科目Bで点を取りたいなら、配列・リスト・ポインタを別々の暗記項目にしないことです。配列は番号で読む、リストはポインタでたどる、ポインタは次の場所を示す。この3つをセットで使えるようにしておくと、問題の見え方がかなり変わります。
まずは小さな表を見て、どの列が値で、どの列が移動先なのかを分けるところから始めると十分です。
基本情報でポインタを解く手順

表を書いて追う
基本情報の配列・リスト・ポインタを解くときは、最初から頭の中だけで処理しようとしない方がいいです。特に科目Bは、擬似言語の読み取りに加えて、変数や配列の値が少しずつ変わります。1行読み飛ばすだけで答えが変わるので、表を書いて状態を追うのが一番安定します。これは時間がかかるように見えて、結果的にはミスを減らします。
配列なら、添字と値の表を作ります。リストなら、要素番号、データ、next、必要ならprevを並べます。そして擬似言語を1ステップ進めるたびに、変わった場所だけを書き換えます。全部を書き直す必要はありません。変化した変数、参照した要素、更新したポインタだけをメモすれば十分です。
おすすめは、左側に擬似言語の行、右側に変数の状態を書く方法です。例えば、currentが3から7へ変わった、nextが2になった、A[i]が上書きされた、という変化を横に置きます。こうすると、途中で「なぜこの選択肢になるのか」を確認しやすくなります。あとから見返しても、どこで状態が変わったかが分かります。
| メモする項目 | 目的 |
|---|---|
| current | 今いる要素を見失わない |
| next | 次に進む先を確認する |
| A[i] | 配列の参照値を確認する |
| 更新箇所 | 処理後の状態を残す |
トレースが苦手な場合は、先に基本情報のトレース表の書き方で、表の作り方を確認してから戻ってくるのもありです。配列やリストの問題は、トレース表と相性がいいです。値を追う習慣がつくと、長い問題でも焦りにくくなります。
慣れるまでは、1問につき少し多めにメモして大丈夫です。速さは後からついてきます。
添字の開始を確認
配列問題で最初に確認したいのが、添字の開始位置です。基本情報の問題では、配列の要素番号が1から始まる前提で書かれることがあります。一方で、プログラミング経験者は0から始まる配列に慣れていることが多いです。このズレがあると、A[1]を先頭として見るべき問題で、A[0]を想像してしまい、答えが一つずれます。
試験中は、問題文に「添字は1から始まる」「要素番号は0から始まる」「配列の要素数はnである」といった前提がないか、最初に探してください。前提が書かれている問題では、そこが解くためのルールです。自分が普段使っている言語の常識より、問題文のルールを優先します。ここを徹底するだけで、配列の選択肢ミスはかなり減ります。
- 添字が1から始まるか
- 添字が0から始まるか
- 最終要素がnかn-1か
- 繰返し条件に等号が含まれるか
次に見るのは、繰返し条件です。「iがn以下の間」と「iがn未満の間」では、最後に処理する要素が変わります。配列の範囲外を参照しないようにするための条件なのか、最後の要素まで処理するための条件なのかを見ます。ここを雑に読むと、途中の計算が合っていても、最後の1回だけ余分に処理してしまうことがあります。
リストでも同じで、先頭を示す値がどこにあるか、末尾が何で表されるかを最初に見ます。NULL、0、空欄、-1など、終端の表し方は問題によって変わります。終端を見落とすと、処理がどこで止まるのか判断できません。配列なら添字、リストなら先頭と終端。これを最初に確認するのが基本です。
nextを先に読む
リスト問題では、データの値よりもnextを先に読むと流れをつかみやすいです。もちろん条件判定にはデータの値を使いますが、処理の道筋を決めているのはポインタです。現在位置のnextがどこを示しているかを確認し、次に進む要素を決めます。これを繰り返せば、表の並び順に惑わされにくくなります。
例えば、表の1行目、2行目、3行目がそのままリストの順番だと思って読むと、問題によっては間違えます。先頭が3で、3のnextが7、7のnextが2なら、読む順番は3→7→2です。表の上から順に読むのではなく、ポインタの矢印をたどる。ここがリスト問題の本質です。
nextを読むときは、現在位置を書きながら進めるのがおすすめです。current = 3、next = 7、current = 7、next = 2というように、現在位置を更新していきます。もし前の要素も必要な処理なら、prevやbeforeも一緒にメモします。削除処理では、削除対象の一つ前の要素が重要になることが多いからです。
| 状態 | 確認する内容 |
|---|---|
| current | 今見ている要素 |
| next | 次に移動する要素 |
| prev | 一つ前の要素 |
| target | 挿入・削除の対象 |
擬似言語が苦手な人は、基本情報の擬似言語対策|読み方とトレース手順で、if文や繰返しの読み方も確認しておくと安心です。リスト問題はポインタだけでなく、条件分岐と繰返しがセットで出るので、基本構文の読み方も同時に固めておきたいですね。
特に、while文でcurrentを更新する位置は要注意です。条件判定の前に進むのか、判定した後に進むのかで、調べる要素が変わります。nextを読むたびに矢印を一本ずつ書けば、このズレに気づきやすくなります。
更新順でミスを防ぐ
ポインタ問題で特に注意したいのが、更新順です。リストに新しい要素を挿入するとき、先にどのポインタを書き換えるかで、元のつながりを見失うことがあります。例えば、前の要素のnextを新しい要素に向ける前に、新しい要素のnextへ元の次要素を入れておかないと、「元々どこにつながっていたか」が分からなくなることがあります。

試験では、ポインタを更新する代入文が選択肢になっていることがあります。このときは、代入前の状態と代入後の状態を分けて考えます。代入文は右辺を先に評価し、左辺へ入れる、と読むのが基本です。右辺で必要な値が、直前の代入で上書きされていないかを確認してください。ここが、ポインタ更新のひっかけになりやすいです。
削除処理でも同じです。削除対象を見つけたら、前の要素のnextを、削除対象のnextへ向けます。これで削除対象を飛ばしてつながります。ただし、削除対象が先頭の場合は、先頭ポインタそのものを更新しなければなりません。途中要素の削除と先頭要素の削除では、更新する場所が違います。問題文で「先頭を削除する場合」が別処理になっていないか確認しましょう。
- 更新前のnextをメモする
- 新しい要素のnextを先に決める
- 前の要素から新しい要素へつなぐ
- 先頭や末尾の特別処理を確認する
配列の更新でも、同じように順番が重要です。後ろへずらす処理では、前からコピーすると元の値を上書きしてしまうことがあります。後ろから前へずらすのか、前から後ろへ詰めるのか、処理の向きを確認してください。配列でもリストでも、更新順は「元の値を失わないため」にあります。この意識を持つと、選択肢の代入文を冷静に読めます。
まとめと演習手順
基本情報の配列・リスト・ポインタは、最初は難しく見えますが、見る場所を決めればかなり整理できます。配列は添字で直接見る。リストは先頭からポインタをたどる。ポインタは次の場所を示す情報として読む。この3つが分かれば、科目Bのデータ構造問題で何を追えばいいかが見えてきます。
演習するときは、いきなり難しい問題を大量に解くより、配列だけ、リストだけ、ポインタ更新だけ、という小さな単位で練習するのがおすすめです。1問ごとに、添字、current、next、更新箇所をメモします。答え合わせでは、正解か不正解かだけでなく、自分の表のどこでズレたかを見ます。これを繰り返すと、ミスの種類が見えてきます。
- 配列は添字と値の表を書く
- リストは先頭からnextをたどる
- ポインタ更新は前後の矢印を書く
- 間違えたらズレた行を確認する
科目B対策では、読むだけで分かった気にならないことも大切です。配列・リスト・ポインタは、手を動かして初めて定着します。問題を解くときは、必ず小さな表や矢印を書いてください。数問でも丁寧にトレースすると、擬似言語の流れを読む感覚が育ちます。
科目Bが苦手なら
アルゴリズムや擬似言語は、読むだけでなく手を動かして解く量が大切です。科目Bに絞って対策したい人向けです。
最後にもう一度整理すると、基本情報の配列・リスト・ポインタは、暗記よりも読み方が重要です。配列は番号、リストはつながり、ポインタは次の場所。これを問題文の表と擬似言語に当てはめて、一行ずつ状態を書き換える。それだけで、苦手だった科目Bの問題がかなり解きやすくなるはずです。
次に問題を解くときは、まず添字、先頭、nextの3点だけを確認してから読み始めてください。


コメント