Advertisement
Guest User

fibheapsearch

a guest
Oct 26th, 2015
203
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.37 KB | None | 0 0
  1. struct fibnode *fibheap_find_key(struct fibheap *heap, struct fibnode *h, int key)
  2. {
  3.     struct fibnode *x = h;
  4.     struct fibnode *p = NULL;
  5.     if(x->left == x && x->key != key && x->child == NULL) // если в куче один единственный элемент и он не подходит
  6.         return p;
  7.     while((x != h->left || x == h->left) && p == NULL) { // проход по циклическому списку (|| x == h->left) используется для предотвращения пропуска элемента h->left
  8.         if(x->key == key) {
  9.             p = x; //нашли элемент, p больше не NULL, выходим из while.
  10.         }
  11.         if(x->child != NULL && x->degree >= 2) // если у узла два и больше детей, то рекурсивно рассматриваем "детский" цикл. сп.
  12.             p = fibheap_find_key(heap, x->child, key);
  13.         else if (x->child != NULL && x->degree == 1) { // если ребёнок только один, то проверяем этого ребёнка
  14.             if(x->child->key == key) {
  15.                 p = x->child;
  16.             }
  17.         }
  18.         x = x->right; //двигаемся вправо по цикл.списку
  19.     }
  20.     return p; // возвращаем либо адрес нужного узла, либо NULL
  21. };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement