令和5年度 秋期 午前 問5
基礎理論
双方向リストに関する問題
双方向リストを三つの一次元配列 elem[i],next[i],prev[i]の組で実現する。双方向リストが図の状態のとき,要素 D の次に要素 C を挿入した後の next[6],prev[6]の値の組合せはどれか。ここで,双方向リストは次のように表現する。
・双方向リストの要素は,elem[i]に値,next[i]に次の要素の要素番号,prev[i]に前の要素の要素番号を設定
・双方向リストの先頭,末尾の要素番号は,それぞれ変数 Head,Tail に設定
・next[i],prev[i]の値が 0 である要素は,それぞれ双方向リストの末尾,先頭を表す。
・双方向リストへの要素の追加は,一次元配列の末尾に追加
〔図〕
一次元配列の末尾
↓
要素番号 | 1 | 2 | 3 | 4 | 5 | 6 |
elem | A | F | D | B | E | | ← 6 は空き
要素番号 | 1 | 2 | 3 | 4 | 5 | 6 |
next | 4 | 0 | 5 | 3 | 2 | |
要素番号 | 1 | 2 | 3 | 4 | 5 | 6 |
prev | 0 | 5 | 4 | 1 | 3 | |
Head | 1 | Tail | 2 |- アnext[6] = 2 / prev[6] = 3
- イnext[6] = 3 / prev[6] = 4
- ウnext[6] = 5 / prev[6] = 3
- エnext[6] = 5 / prev[6] = 4
答えと解説を見る
✓ これが正解ウnext[6] = 5 / prev[6] = 3
解説
挿入した要素の次は E、前は D になります。
設問は、三つの一次元配列で双方向リストを表したとき、要素 D の次に要素 C を挿入した後の、新しい要素の次と前の値を問うています。まず配列の番号順ではなく、先頭から順につないでたどります。先頭は 1 番の A で、次は 4 番の B、その次が 3 番の D、続いて 5 番の E、最後が 2 番の F です。末尾は 2 番なので、変数に設定された末尾の要素番号とも合います。C は配列の末尾に追加するので、空いている 6 番に入ります。入れる場所は D と、D の次にあった要素の間なので、6 番から見ると次は E がある 5 番、前は D がある 3 番です。正解は次が 5、前が 3 の組合せです。実装では、前の要素の次と、後ろの要素の前も書き換えます。
ほかの選択肢はなぜ違うのか
- アnext[6] = 2 / prev[6…:前を 3 とした点は合っていますが、次に 2 を置いています。これは E のさらに先にある F の番号で、たどる先を一つ行き過ぎた形です。入れる場所は D のすぐ後ろです。
- イnext[6] = 3 / prev[6…:次に 3、前に 4 を置いた組合せです。次と前が入れ替わっているうえ、前には D ではなく、D よりも手前にある B の番号が入っています。二重に取り違えた形です。
- エnext[6] = 5 / prev[6…:次を 5 とした点は合っていますが、前が 4 になっています。4 番にあるのは B で、新しく入れた要素のすぐ手前は D なので、ここに入るのは D の要素番号のほうです。
出典:令和5年度 秋期 応用情報技術者試験 午前 問5
この解説に誤りを見つけたら教えてください。直して、直した記録を残します。誤りを報告する(メールが開きます)