単方向リストへの要素の追加【基本情報技術者試験 科目B サンプル問題】

(令和4年度4月公開) 基本情報技術者試験 サンプル問題 科目B 問3のブログのアイキャッチ画像 科目B 公開問題
広告

← 科目Bの公開問題一覧へ戻る

 基本情報技術者試験の科目Bのサンプル問題を題材に,単方向リストへの要素の追加について学習します。この問題では,参照をたどってリストの末尾を探し,新しい要素を追加する処理を確認します。

広告

(令和4年度4月公開) 基本情報技術者試験 サンプル問題 科目B 問3

 次のプログラム中の   a    b   に入れる正しい答えの組合せを,解答群の中から選べ。

 手続 append は,引数で与えられた文字を単方向リストに追加する手続である。単方向リストの各要素は,クラス ListElement を用いて表現する。クラス ListElement の説明を図に示す。ListElement 型の変数はクラス ListElement のインスタンスの参照を格納するものとする。大域変数 listHead は,単方向リストの先頭の要素の参照を格納する。リストが空のときは,listHead は未定義である。

「(令和4年度4月) 基本情報技術者試験 サンプル問題 科目B 問3」の問題画像

〔プログラム〕

大域: ListElement: listHead ← 未定義の値

○append(文字型: qVal)

 ListElement: prev, curr

 curr ← ListElement(qVal)

 if (listHead が   a   )

  listHead ← curr

 else

  prev ← listHead

  while (prev.next が 未定義でない)

   prev ← prev.next

  endwhile

  prev.next ←   b  

 endif

解答群

a

b

未定義curr
未定義curr.next
未定義listHead
未定義でないcurr
未定義でないcurr.next
未定義でないlistHead

【解答】

【解説】

ListElement は,データ(val)と次の要素への参照(next)を持つクラスである。手続 append は,引数で与えられた文字を単方向リストの末尾に追加する。

リストが空の場合は,listHead が未定義である。そのため,listHead ← curr として,新しく作成した要素を先頭にする。よって,a は未定義である。

リストが空でない場合は,prev ← listHead から始め,prev.next を順番にたどって末尾の要素を探す。末尾の要素では next が未定義なので,そこで探索を終了する。その後,末尾の要素の next に,新しく作成した要素 curr への参照を設定する。したがって,b は curr である。

【参考】

「(令和4年度4月) 基本情報技術者試験 サンプル問題 科目B 問3」の解答画像

この問題のポイント

 この問題から学べることは,

  • 単方向リストの基本的な構造
  • val と next を使ってリストの要素を表現する方法
  • 参照をたどってリストの末尾を探す方法
  • リストの末尾に新しい要素を追加する方法
  • トレース表を使って,リストの要素や参照の変化を追跡する方法

です。特に,prev.next を順番にたどって末尾の要素を探し,その next に新しい要素への参照を設定する処理を理解しておきましょう。

基本情報技術者試験の学習におすすめの参考書

基本情報技術者試験の合格を目指す方におすすめの参考書です。

令和08年 イメージ&クレバー方式でよくわかる かやのき先生の基本情報技術者教室
基礎理論からコンピュータ・ネットワーク・データベースまで、基本情報技術者試験の全範囲をわかりやすく学べる定番テキストです。図解が豊富で、初学者にもおすすめです。

キタミ式イラストIT塾 基本情報技術者 令和08年
イラストを使った解説が特徴の人気参考書です。基礎理論の考え方や計算問題もイメージで理解しやすく、独学学習との相性が良い一冊です。

令和08年 基本情報技術者 合格教本
試験範囲を体系的に学習したい方におすすめの教科書です。基礎理論の各テーマも丁寧に解説されており、理解を深めながら学習を進められます。

学習のお役に立ちましたら

この記事が少しでも学習のお役に立ちましたら,今後も分かりやすい解説や学習コンテンツを継続してお届けする励みになります。

よろしければ、このサイトを応援いただけますと嬉しいです。

※OFUSEは,クリエイターやコンテンツ制作を直接支援できるサービスです。

広告