insert_position (doubly-linked list)
双方向リストでの要素の途中挿入

ミニレポート第 6 回課題

第7回授業図6.5の プログラムに教科書 P.76 Fig.5.11 で説明されている, 指定されたセルの直後にデータを挿入する関数 insert_position を追加する.

insert_position の仕様

前提:以下の通りとする.(教科書の双方向(循環)リストと同じ)

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

戻り値:なし

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

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

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

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

テスト実行のヒント

main ルーチンでまず(2 5 12 -4) のリストを作ってみる.insert_position が正しくできていれば リストの頭を使用した実現であるから最初の要素の挿入も insert_position で行える(最初の要素専用の insert_head などが 必要無い)具体的には insert_position(&head, 値) で先頭に指定の値の要素を挿入できるので, new_list() でリストを空にして, insert_position(&head, -4) を実行することで -4 のみを 要素としてもつリストができる.続けて insert_position(&head, 12) でリストは (12 -4) になる.このようにしてテスト用のリスト (2 5 12 -4) を作り,適宜 print_all(), print_reverse() を実行しながら insert_position(head.next, 6) を行うなどして プログラムの正しさをテストすればよい.

注意事項

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


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