正の値である間、または、リストのノードが無くなるまで、リストを先頭から順に辿り、正数の和を求める関数 int sum_positive(Node *root); を作れ。⇒ list1001.c
ただし、push 操作でリストに値を追加しているので、入力した10個の数は、入力順とは逆順でリストに格納されていることに注意せよ。
リスト内の値のうち、指定する値より大きい値であり、かつ、先頭から見て最初に出現するものを返す関数 int find_first_larger(Node *root, int t); を作成せよ。なお、指定値より大きい値が存在しない場合は、指定値を返せ。⇒ prac1001.c
リストの途中に新しいノードを追加することを挿入という。入力する値がリスト内の値より大きいならば次ノードを辿り、そうでないならば、その位置に入力する値を持つノードを追加する。こうすることで、昇順にソートされたリストが作られる。
void list_insert(Node *root,int num){ Node *p,*q; for( p=root; (p−>next != NULL)&& (p−>next−>val < num); p=p−>next){} q = list_make_node(num); q−>next = p−>next p−>next = q; }
10個の整数を入力し、リストに蓄え、最後に全てを表示するプログラムを、上記の関数 list_insert を用いて作成せよ。list_push を用いる場合との違いを確認せよ。⇒prac1002.c
以下のメイン関数を実行した場合、どのようにノードが作られるかを、処理過程に沿って作図し、説明せよ。ただし、先週のプリントにあった10コマの図を参考に list_push, list_insert の関数内の処理ステップまで分解し説明すること。⇒prac1003.c
main(){ Node root; root.next = NULL; list_insert(&root,7); list_push(&root,5); list_insert(&root,8); list_insert(&root,4); list_insert(&root,6); list_print(&root); }
※ 普通は、insert 操作によりリストを作っているときに、push 操作は行わない。今回は練習問題なので、insert 操作と push 操作が混在している。