平成30年度 春期 午前 問6
データ構造
リストに関する問題
リストを二つの1次元配列で実現する。配列要素 box[ i ] と next[ i ] の対がリストの一つの要素に対応し,box[ i ] に要素の値が入り,next[ i ] に次の要素の番号が入る。配列が図の状態の場合,リストの3番目と4番目との間に値が H である要素を挿入したときの next[ 8 ] の値はどれか。ここで,next[ 0 ] がリストの先頭(1番目)の要素を指し,next[ i ] の値が0である要素はリストの最後を示し,next[ i ] の値が空白である要素はリストに連結されていない。
| 添字 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
|---|---|---|---|---|---|---|---|---|---|---|
| box | A | B | C | D | E | F | G | H | I | |
| next | 1 | 5 | 0 | 7 | 3 | 2 |
- ア3
- イ5
- ウ7
- エ8
答えと解説を見る
✓ これが正解ウ7
解説
挿入した要素は、もとの4番目を指すので7です。
このリストは、値の入った配列と、次の要素の番号が入った配列の対で作られています。先頭は0番の次に書かれた値なので、1番のAから始まりました。1番の次は5番のE、5番の次は3番のC、3番の次は7番のG、7番の次は2番のBです。2番の次は0なので、そこで終わりました。並びはA、E、C、G、Bの五つです。3番目はCで添字は3、4番目はGで添字は7でした。この間にHを入れるので、Hの入っている8番の次に7を書きます。あわせて3番の次を8に書き換えました。問われているのは8番の次なので、7が当たります。3という値は、一つ手前、つまり2番目と3番目の間に入れた場合の答えでした。5という値は、さらに手前の先頭の直後に入れた場合になります。8という値は、3番の次に書くべきものと取り違えた形でした。どこに入れるかを先に添字で書き出しておくと迷いません。
ほかの選択肢はなぜ違うのか
- ア3:3としています。この値は、2番目と3番目の間に入れた場合に8番へ書かれるものでした。数える位置が一つ手前にずれています。設問が指定したのは3番目と4番目の間なので、後ろへつながる相手が変わってしまいました。
- イ5:5としています。これは先頭の直後、つまり1番目と2番目の間に入れた場合の値でした。指定された位置から二つ手前にずれています。先頭から順に番号をたどると、5番はまだ2番目の要素にあたるところでした。
- エ8:8としています。8はHそのものが入っている添字でした。書き換えが必要なのは二か所あり、3番の次に8を書き、8番の次に7を書きます。この値は前者のほうです。二つの書き換えを取り違えていました。
出典:平成30年度 春期 基本情報技術者試験 午前 問6
この解説に誤りを見つけたら教えてください。直して、直した記録を残します。誤りを報告する(メールが開きます)