スポンサーリンク

基本情報技術者試験 | 令和5年度(科目A) [問2] 過去問解説

スポンサーリンク

問題

問2

双方向のポインタをもつリスト構造のデータを表に示す。この表において新たな社員Gを社員Aと社員Kの間に追加する。追加後の表のポインタa~fの中で追加前と比べて値が変わるポインタだけを全て列記したものはどれか。

  • a, b, e, f
  • a, e, f
  • a, f
  • b, e

[出典:基本情報技術者試験 令和5年度(科目A) 問2]

スポンサーリンク

正解

正解は「」です。

解説

 この問題は、双方向リストにおいて新しいノード(社員G)を既存のノード(社員Aと社員K)の間に挿入した際に、どのポインタの値が変わるかを問う問題です。双方向リストでは、各ノードが「次のノード」へのポインタと「前のノード」へのポインタを持ちます

 まず、挿入前の状態を見てみましょう。社員A(アドレス100)次ポインタで社員K(アドレス300)を指しており、社員Kは前ポインタで社員Aを指しています。ここに新たなノード、社員G(アドレス400)を挿入するには、以下のようにポインタを変更する必要があります。

  • 社員Aの次ポインタ:300 → 400(a)
  • 社員Gの前ポインタ:? → 100(b)※このbは新たに追加されただけで既存の変更ではない
  • 社員Gの次ポインタ:? → 300(x)※新しいノードの定義なので比較対象外
  • 社員Kの前ポインタ:100 → 400(f)  

 このように、挿入によって「変更」されるのは、社員Aの次ポインタ(a)と社員Kの前ポインタ(f)です。社員Gの情報(x, y, b)は新しく追加されるものですが、「変更」ではなく新規設定なので対象外です。また、社員Tの情報には何の変更もありません。

 したがって、値が変更されたポインタは「a, f」の2つとなり、選択肢「ウ」が正解です。

ア(a, b, e, f):
 bとeは新規に追加されたノード社員Gに関連するポインタであり、既存ノードの変更ではないため含めるのは誤りです。
イ(a, e, f):
 eは社員Kの次ポインタであり、変更されていません。挿入によって社員Kの「前」ポインタが変更されたのみです。
エ(b, e):
 bとeはいずれも新規ノードに関するもので、既存の変更箇所ではありません。正解となるaとfが含まれていないため不適切です。

難易度

 この問題はリスト構造、特に双方向リストの挙動について正確に理解している必要があり、プログラミングやデータ構造の基礎に触れていない初学者にはやや難しいです。しかし、変更されるポインタのみを問うシンプルな出題形式であるため、リスト構造に慣れていれば中程度の難易度といえます。

スポンサーリンク

用語補足

双方向リスト:
各要素が前後の要素を指すポインタを持つリスト構造です。ノード間を前後に移動できるため、柔軟なデータ操作が可能です。例としては、電車の車両の連結のように、前後どちらからでも辿れる構造です。

ポインタ:
メモリ上の特定のアドレス(位置)を指し示す値です。リスト構造などで、次や前の要素の場所を示すのに使われます。

ノード:
リスト構造における1つ1つの要素のことです。ノードはデータとポインタを含む構造で、例えば社員情報を保持しつつ次や前のノードへのポインタを持ちます。

対策

 双方向リストの挙動を図でイメージしながら、挿入や削除によって変更されるポインタに注目する練習をしましょう。特に「何が新規追加で、何が既存変更か」を区別する力を養うことで、類似問題にも対応できます。紙とペンを使って自分で図を描いてみると理解が深まります。