insert_position (linked list)
連結リストでの要素の途中挿入

ミニレポート第 5 回課題

第6回授業図5.11の プログラムに教科書 P.58 List5.1 (1) と同じ機能をもつ関数 insert_position を追加する.

insert_position の仕様

前提:以下の通りとする.(教科書と同じ)

引数:struct CELL 型へのポインタと整数型の値が渡される.

戻り値:なし

関数定義の書き出し例: void insert_position(struct CELL *x, int v)

機能:渡されたパラメータがそれぞれ x と v だとすると (上の関数定義の例) x で指されたセルの 直後 に value の値が v である新しいセルを挿入する. 例えば,リストに要素が 4 個あり,内容が (2 5 12 -4) であったとき insert_position(header.next, 6) を 実行すればリストは (2 6 5 12 -4) となり,このリストにさらに insert_position(header.next->next, 8) を行うと (2 6 8 5 12 -4) になる

引数として NULL など不正な値が渡されたときの エラー処理はなくてもよい.意味のあるデータが渡されると 仮定してよい.

ヒント

  1. まず第6回授業図5.11の プログラムがベースになるのでこれをreport05.cとして保存する.
  2. 作成する insert_position の書き出しを指示の通りに作る. 内容が空の関数
    void insert_position(struct CELL *x, int v)
    {
    }
    
    を作る.場所はmain関数の前ならどこでも良いが insert_head の 定義が終了した直後に置けばいい.
  3. 教科書 p.58 の List5.1 の (1) を実装する. 今作った関数 insert_head の仮引数 x に 教科書と同じ挿入される新しいセルの直前のセルの ポインタが入力され,仮引数 v に新しいセルの value メンバ に入力されるべき値がセットされた状態で この関数は動作する.List5.1(1) の 1-3 行目は同じことをすれば いいのでそのまま書くが,4 行目の fatal_error が実験環境には無いので 4 行目は
        exit(1);
    
    に変える.
  4. 教科書 p.58 の List5.1 の (1)5 行目の
    セルに値をセットする
    は,ポインタ p で新しいセルが示されていて,その value メンバに代入すべき値が仮引数 v にセットされているので
    p->value = v;
    と書く.
  5. 残りの 6,7 行は List 5.1 (1) と同じ.
  6. main にテストとして 作った insert_position を使って 途中に要素を挿入する行を書き,確認するためにその行の 前後で print_all() を書いて要素を表示させる. いろいろなテストを行なって insert_position が 正しく動作しているかどうかを確認する.例えば 課題ページに記載されている例で insert_position を実行して 変化を print_all で確認する main ルーチンは
    int main(void)
    {
        new_list();
        insert_head(-4);
        insert_head(12);
        insert_head(5);
        insert_head(2);
        print_all();
        insert_position(header.next, 6);
        print_all();
        insert_position(header.next->next, 8);
        print_all();
    }
    
    のようなものである.

プログラム全体についての注意

注意事項

受理した学生のリストを 1 クラス提出者 2 クラス提出者 3 クラス提出者 に掲載する. 締切までに提出したにもかかわらず締切後一週間を過ぎても掲載されていない 場合は山本 <hiroshi@tokai.ac.jp>まで連絡せよ. 未提出の学生はすみやかに再提出せよ. 再提出後一週間経っても掲載されない場合も 山本まで連絡せよ.


Updated in November 4, 2019, index.html, Yamamoto Hiroshi Web