新らしくなった基本情報 科目 B アルゴリズムとプログラミング サンプル問題3をJavaにしてみました
2023 年 4 月からIPA (独立行政法人情報処理推進機構)の基本情報技術者試験の制度が変更されました。
ここでは、「基本情報技術者試験 科目 B のサンプル問題」の中から、アルゴリズムとプログラミングの問題を取り上げ、Javaのソースコードを示します。
新人エンジニア研修に参加されている皆様の参考になれば幸いです。
問 3
次のプログラム中のaとbに入れる正しい答えの組合せを,解答群の中から選べ。
手続 append は,引数で与えられた文字を単方向リストに追加する手続である。単方向リストの各要素は,クラス ListElement を用いて表現する。クラス ListElement の説明を図に示す。ListElement 型の変数はクラス ListElement のインスタンスの参照を格納するものとする。大域変数 listHead は,単方向リストの先頭の要素の参照を格納する。リストが空のときは,listHead は未定義である。
メンバ変数 | 型 | 説明 |
---|---|---|
val | 文字型 | リストに格納する文字。 |
next | ListElement | リストの次の文字を保持するインスタンスの参照。初期状態は未定義である。 |
コンストラクタ | 説明 |
---|---|
ListElement(文字型: qVal) | 引数 qVal でメンバ変数 val を初期化する。 |
図 クラス ListElement の説明
【プログラム】
大域: 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 |
【Javaプログラム】
【結果】
LinkedList: s a y c o n |
【プログラムの解説】
このプログラムは、単方向連結リストを実装し、新しい要素をリストの末尾に追加するメソッド append
を定義しています。
ListElement
クラスは、リストの要素を表すためのクラスで、char
型の val
フィールドと、次の要素を指す next
フィールドを持ちます。
LinkedList
クラスは、リストの先頭要素を表す listHead
フィールドを持ち、append
メソッドが定義されています。append
メソッドは、新しい要素をリストの末尾に追加するためのメソッドです。リストが空の場合は、新しい要素をリストの先頭に設定します。リストに既に要素がある場合は、リストの末尾に新しい要素を追加します。
printList
メソッドは、リストの中身を表示するためのメソッドです。listHead
フィールドからリストの先頭要素を取得し、次の要素が null
になるまで、各要素の val
フィールドの値を表示します。
テストクラス Q3
では、LinkedList
クラスのインスタンスを作成し、append
メソッドで要素を追加しています。最後に、printList
メソッドを呼び出して、リストの内容を表示しています。