menu
プログラミング4・プログラミング演習II[後半]
提出課題解答例
  1. 第1週 文字列 解答例
  2. 第2週 動的メモリ管理 解答例
  3. 第3週 線形探索と二分探索 解答例
  4. 第4週 ソートアルゴリズム 解答例
  5. 第5週 リスト構造 解答例
  6. 第6週 木構造と二分木 解答例

    第1週 文字列
    [解答例1]
    code/1/kadai1.c
    [解答例2]
    code/1/kadai1b.c

    第2週 動的メモリ管理
    [解答例]
    code/2/kadai4-2.c

    第3週 線形探索と二分探索
    [解答例]
    code/3/kadai4-3.c

    第4週 ソートアルゴリズム
    [解答例]
     挿入ソートにおいては挿入するデータよりも前に位置するデータは仮ではあるがソート済みであり、比較した結果で挿入の必要がなければ、ソート済みデータに対しては以降の比較と移動処理が不要となります。そのため、ある程度整列したデータ列に対しては比較・移動処理回数を少なくすることができ、結果として高速に動作します。逆に、降順に整列したデータ列を昇順にソートしようとした場合は、未ソート部分には必ずソート済みデータの中の一番小さな値よりも小さなデータがあるため、すべてのソート済みデータとの比較、i番目のデータではi回の比較・移動処理が必要となるため、時間計算量は1+2+...+(N-1) = N(N-1)/2回となります。
    code/4/kadai4-4.c

    第5週 リスト構造
    [解答例]
    code/5/kadai4-5.c

    第6週 木構造と二分木
     二分探索木の探索における時間計算量オーダーは木の高さに相当するのでO(logn)となりますが、関数print_decsend()はn個のノードを巡回してそのデータ値を表示している、すなわちn回の処理を行っているので、時間計算量オーダーはO(n)となります。再帰呼び出しを利用してはいますが、n回の繰り返し処理と時間計算量は変わりません。
    [解答例]
     (注)問題のソースコードでは省略されていた、ノード追加のために確保した記憶領域の解放処理を、以下の解答例では追加しています。
    code/6/kadai4-6.c