令和5年度 科目A 問2
データ構造
ポインタだけを全て列記したもの
双方向のポインタをもつリスト構造のデータを表に示す。この表において新たな社員 G を社員 A と社員 K の間に追加する。追加後の表のポインタ a ~ f の中で追加前と比べて値が変わるポインタだけを全て列記したものはどれか。
表
| アドレス | 社員名 | 次ポインタ | 前ポインタ |
|---|---|---|---|
| 100 | 社員 A | 300 | 0 |
| 200 | 社員 T | 0 | 300 |
| 300 | 社員 K | 200 | 100 |
追加後の表
| アドレス | 社員名 | 次ポインタ | 前ポインタ |
|---|---|---|---|
| 100 | 社員 A | a | b |
| 200 | 社員 T | c | d |
| 300 | 社員 K | e | f |
| 400 | 社員 G | x | y |
- アa,b,e,f
- イa,e,f
- ウa,f
- エb,e
答えと解説を見る
✓ これが正解ウa,f
解説
変わるのは社員Aの次ポインタaと社員Kの前ポインタfです。
双方向リストでは、各要素が次の要素を指す次ポインタと、一つ前の要素を指す前ポインタの二つをもちます。見分ける軸は、新しい要素を挟み込む位置の両隣で、どのポインタが新しい要素を指すように付け替わるかです。追加前は、アドレス100の社員Aの次がアドレス300の社員K、社員Kの前が社員Aでした。社員Gをアドレス400に置いて二人の間に入れると、社員Aの次ポインタは300から400に、社員Kの前ポインタは100から400に変わります。社員Aの前ポインタ0、社員Kの次ポインタ200、社員Tの二つのポインタは、つながり方が変わらないのでそのままです。社員G自身の次と前はそれぞれ300と100になりますが、問われているaからfには含まれません。挿入では、挟む二つの要素の向かい合うポインタだけが書き換わると覚えておくと、素早く絞れます。
ほかの選択肢はなぜ違うのか
- アa,b,e,f:bは社員Aの前ポインタで、前に要素がないことを表す0のまま変わりません。eは社員Kの次ポインタで、後ろの社員Tを指す200のままです。挿入位置と反対の外側を向いたポインタまで数えています。
- イa,e,f:aとfは正しく変わりますが、eは社員Kから後ろの社員Tへのつながりを表すポインタで、追加の前後で200のままです。社員Gは社員Kの前に入るので、社員Kの後ろ側は影響を受けません。
- エb,e:社員Aの前ポインタと社員Kの次ポインタは、どちらも挿入位置とは反対の外側を向いており、値は変わりません。実際に書き換わる社員Aの次ポインタと社員Kの前ポインタが抜けています。
出典:令和5年度 基本情報技術者試験 科目A 問2
この解説に誤りを見つけたら教えてください。直して、直した記録を残します。誤りを報告する(メールが開きます)