本文へスキップ

技術士試験(情報工学部門)・情報技術者試験。ファーストマクロ。


Since 2016.4.19

令和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┃ ┃
    └─┴─┴─┴─┴─╂─┨
要素番号 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]│ prev[6]│
 ┌─┼────┼────┤
 │ア│   2│   3│
 ├─┼────┼────┤
 │イ│   3│   4│
 ├─┼────┼────┤
 │ウ│   5│   3│
 ├─┼────┼────┤
 │エ│   5│   4│
 └─┴────┴────┘


正解


解説

挿入前の要素の並びは
Headが1だから、elem[1]を参照し、その要素はA。
next[1]が4だから、elem[4]を参照し、その要素はB。
next[4]が3だから、elem[3]を参照し、その要素はD。
next[3]が5だから、elem[5]を参照し、その要素はE。
next[5]が2だから、elem[2]を参照し、その要素はF。
next[2]が0だし、Tailが2だから、要素Fが末尾。
ということで、ABDEFの順で並んでいる。
ここで、要素Dの次に要素Cを挿入するが、双方向リストへの要素の追加は、一次元配列の末尾に追加することから、配列6、つまりelem[5] に要素Cを挿入する。
そして、要素Cの次は要素Eになるので next[6] には要素Eが設定されている要素番号5を設定する必要がある。
一方、要素Cの前は要素Dになるので prev[6] には要素Dが設定されている要素番号3を設定する必要がある。
したがって、が正しい。

ちなみに next[3]には6、prev[5]には6を設定しなおす必要がある。

問4 目次 問6