基本情報技術者試験的な備忘録2023サンプル問題 問10 単方向リスト・オブジェクト指向

基本情報技術者試験2023サンプル問題 問10 単方向リスト・オブジェクト指向


プログラム素人です。
アルゴリズム素人です。
間違いだらけです。ただの自分向けメモです。

以前から何度もやっている単方向リストの問題。そしてオブジェクト指向の問題。


答えは、カ。

何回やっても、分かっていないので、何回も書いている。汗。


今回注目したのは、表と

 

プログラムの
ListElement: prev
です。

 

表・・・クラスListElementについて記載している。

クラスListElementには、メンバ変数としてvalとnextがある。

クラスは、どこかで、インスタンス化(実体化・記憶域にアドレスに登録)しなければいけない。

(大域では、ListElement: listHaedが既にインスタンス化されているハズ。コンストラクタ(初期化))
(分かっていないが、説明文では、リストの先頭要素の参照があらかじめ格納されているとあるので、
そのメンバ変数nextに、次のリストのアドレスが入っているのだろう。)

 

で、「〇delNode(整数型: pos)」の中、
ListElement: prev
で、インスタンス化。
ここで分からくなったのは、prev(前)の立ち位置。(素人)

prevとnext(次)があるのだから、例えばcurr(現在)とか
prev - curr - nextとかの位置関係かと勝手に考えた。
でもそうではない。(この問題では。)


prevは、nextとかのメンバ変数ではなく、インスタンス化した実体。

 

だから、クラスListElementを実体化した「prev」にはメンバ変数valとnextが付いている。
(と考えていいと思う・・・)

だから(というか何というか)、要素を取り出して扱う時は、prevに入るのであり、

 prev ← prev.next

は、次の要素のprevをprevにする
と考えればいいのだと思う。
(prev.nextのnextの値だけをprevに入れると考えるとこんがらがる。)
(配列としてprev[next]みたいに考えればいいのか???)

 

まあ、オブジェクト指向をよく分かっていないだけです。あと、疑似問題の書き方もいまだに分かっていない。
変数の宣言と
オブジェクト指向でのインスタンス化は
同じような記載の仕方だけど、オブジェクト指向でのインスタンス化は、すごく重要なので、間違えないようにしないと・・・。

 

インスタンス化(今回は、delNodeの手続き・メソッド内で)したら、そこには、実体(ここではprev)があり、
それには、クラスで定義されたメンバ変数が付いている。

まあ、クラスはインスタンス化しないと使えないとか、
クラスには、メンバ変数があるとか、
当たり前のことですが、きちんと整理して考えよう。

 

インスタンス化すると、名前の付いた実体があり、クラスのメンバ変数使える。

(オブジェクト指向、使うことないかな~)