演習課題

   演習課題5-2
 リストマージとは2つのリストに整列格納されたデータを1つのリストにまとめる操作をいう。例えばリストA、Bがあり、各々次のようなデータを持っていたとする。  この2つのリストを先頭から順に読んで、以下の様なリストCを作る。  この様な操作はA,Bが整列されている事を前提とした上で、各リストの長さの和に比例する時間でマージが終了する。アルゴリズムとして書けば以下の様になる。
  1. リストCを空とする
  2. リストAの先頭をtopA、リストBの先頭をtopBとする(以降の動作では現在の位置となる)
  3. topAもしくはtopBが空でない間、以下を繰り返す

    topA->data<topB->dataならばtopA->dataをリストCにつなぎ、topA=topA->nextとする。topA->data>=topB->dataならばtopB->dataをリストCにつなぎ、topB=topB->nextとする。
注1:リスト構造は一方向とし、各要素はdata領域とnext領域を持つものとする。
注2:上記のアルゴリズムのままではtopAもしくはtopBが空になっても存在しないdata領域を使おうとするので、修正の要がある。
注3:リストマージの結果としては生成されたリストCを返す事。

課題:リストマージの関数を実現し、それを利用してリストマージを行え。リストのデータとしては整数を想定せよ。データは上記のデータを想定せよ。各リストに対して標準入力から入力するものとする。

プログラムの大枠は以下のようである。
リストデータ型の宣言

main(){

  リストA,B,Cの宣言

  リストAの生成

  リストBの生成

  リストA,BをマージしてリストCを作る

  リストCのプリントアウト

}

リストを生成する関数

{}

リストをマージする関数

{}