Guest User

Untitled

a guest
May 21st, 2018
66
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.19 KB | None | 0 0
  1. int
  2. dt_insert(dt_t **t, mkey_t x, int y, mvalue_t v) {
  3.     dt_t *tmp;
  4. #ifdef UNIQ_KEYS // Если определяем ДД с уникальными ключами, включить след. строки.
  5.     tmp = dt_search(*t, x); // Ищем значение x в ДД t.
  6.     if(tmp) { // Если найдено, то...
  7.        // printf("Replaced key %d value %d changed to %d\n", x, (*t)->v, v);
  8.        tmp->v = v; // заменяем значение на новое
  9.        return BT_UPDATED; // возвращаем значение, то проапдейтили значение по ключу, а не добавили новый.
  10.     }
  11. #endif // Если при компиляции не указан UNIQ_KEYS, то даже если ключ x существует в ДД t, будет добавлена
  12.        // новая нода с таким же ключом.
  13.     if (*t == NULL || y > (*t)->y) {
  14.        tmp = dt_newnode(x, y, v);
  15.        dt_split(*t, x, &(tmp->l), &(tmp->r));
  16.        *t    = tmp;
  17.        return BT_ADDED;
  18.     } else if ( x < (*t)->x) {
  19.        return dt_insert(&((*t)->l), x, y, v);
  20.     } else {
  21.        return dt_insert(&((*t)->r), x, y, v);
  22.     }
  23. }
Add Comment
Please, Sign In to add comment