基本情報技術者試験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)があり、
それには、クラスで定義されたメンバ変数が付いている。
まあ、クラスはインスタンス化しないと使えないとか、
クラスには、メンバ変数があるとか、
当たり前のことですが、きちんと整理して考えよう。
インスタンス化すると、名前の付いた実体があり、クラスのメンバ変数使える。
(オブジェクト指向、使うことないかな~)