メインコンテンツへスキップ
見出し画像

【科目Bに出ない理由】双方向リストの作成/追加(基本情報技術者試験, 科目B, 午後, 擬似言語, オブジェクト指向)擬似言語⑬Bの1

    このNoteでは「双方向リスト」をオブジェクト指向で実現した擬似言語問題をガチでトレースします。単方向リストの改良版。>【FEB】サンプル問題2問03のNote

    単方向リストの要素クラス(下図)に、前要素へのポインタ変数「prev」を追加して組みます。

    画像

    ゆくゆくは双方向リストの挿入に繋げます。科目Aに出たので、科目Bに出る備えをしたい。>【FEA】令和05年問02のNote

    少しでも学習のお役に立てたら嬉しいです。

    それでは始めましょう!


    >全Noteへのリンク(FE節)
    ※科目Aのテーマ別対策、科目B対策、旧FE午後(セキュリティ)など沢山作りました!

    【NOTICE】著作権を侵害には即座に法的措置をしています。人格否定もブロックなどの自衛手段を行います。私は1個人であり、公人ではありません。プライベート時間の全てを費やして作成してきました。ご理解頂ける方のみ、ご活用されると嬉しいです🫠


    今回の擬似言語

    属性「prev」を追加し、リストを前に辿れるようになりました。

    クラス ListElement
        文字型: val
        ListElement: prev  /* 前の要素への参照 */
        ListElement: next  /* 次の要素への参照 */
    endclass

    今回の擬似言語。

    append関数の流れは、データのオブジェクトを作って、値を代入、リストのためのprev. nextを整備。

    大域: ListElement: listHead←未定義の値
      /* リストの先頭 */
    大域: ListElement: listTail←未定義の値
      /* リストの末尾(保持しておくと便利) */
    
    ○append(文字型: qVal)
        ListElement: curr ← ListElement(qVal)
    
        if (listHead が 未定義)
            listHead ← curr
            listTail ← curr
        else
            listTail.next ← curr  /* 旧末尾の次を新要素に */
            curr.prev ← listTail  /* 新要素の前を旧末尾に */
            listTail ← curr       /* 末尾のポインタを更新 */
        endif

    リストを前から辿る時、先頭要素をlistHeadに記録しました。

    今回は後からも辿るので、listTailを準備。組んでみるとlistTailのお陰でappnedが楽になりました(末尾要素をwhileで探す必要がない)。別NoteでlistTailを設けなかった版を作ってみようかな(*未定)。



    append関数前のメイン処理

    大域宣言を2つやって、append関数の呼び出しに入ります。

    画像



    append("A")のトレース

    単方向リストと同じ。
    ❶オブジェクトを指すcurrを宣言
    ❷値Aを格納したオブジェクトを作り
    ❸currに指させる。

    画像
     
     
    大学・専門学校の先生の解説Note。 学生時代にITパスポート試験・基本情報技術者試験・応用情報技術者試験を独学で高得点合格。情報処理安全確保支援士試験(セキスペ)・データベーススペシャリスト試験・ネットワークスペシャリスト試験・G検定なども取得。 2027年にPD-S受験予定。