=============================================================================== 2002 年 05 月 29 日(水) 2002 年度「応用数理C3」「計算数学1」 岩瀬順一 =============================================================================== == 020529c.c の訂正 == /* p 以下から q を削除し、削除後の新しい木を返す */ Tnode *Tnode_delete(Tnode *p, Tnode *q) { int result; result = strcmp(p->word, q->word); if (result > 0) { p->left = Tnode_delete(p->left, q); return p; } else if (result < 0) { p->right = Tnode_delete(p->right, q); return p; } else { /* 見つかったとき。p == q に注意 */ if (p->right == NULL) { Tnode_destruct(p); return q->left; } if (p->left == NULL) { Tnode_destruct(p); return q->right; } q = Tnode_extractmax(&(p->left)); q->left = p->left, q->right = p->right; Tnode_destruct(p); return q; } } == 020529b.c == /* 素朴なソート(その1) */ #include #include #include #include #define N 23 /* ソートするものの個数 */ #define MAX 99 /* 数値データは 0 ... MAX */ #define swap(I,J) { int tmp = a[(I)]; a[(I)] = a[(J)]; a[(J)] = tmp; } int myrand(int max); void print(void); void sort(void); int a[N]; main() { int i; srand((unsigned)time(NULL)); /* 現在時刻で乱数の種を初期化 */ for (i=0; i a[i+1]) { swap(i, i+1); print(); /* swap() を呼ぶごとに印字する */ break; } } } while (i != N-1); } == 020529c.c == /* 素朴なソート(その2) */ /* 配列をソート。「最大のものを最後へ」の方針で */ void sort(void) { int i, m; for (m=N-1; m>0; m--) { for (i=0; i a[i+1]) { swap(i, i+1); print(); /* swap() を呼ぶごとに印字する */ } } } }