home *** CD-ROM | disk | FTP | other *** search
- /*******************************************************************************
- +
- + LEDA 2.1.1 11-15-1991
- +
- +
- + k_heap.h
- +
- +
- + Copyright (c) 1991 by Max-Planck-Institut fuer Informatik
- + Im Stadtwald, 6600 Saarbruecken, FRG
- + All rights reserved.
- +
- *******************************************************************************/
-
-
-
-
- #ifndef KHEAP_H
- #define KHEAP_H
-
- //------------------------------------------------------------------------------
- //
- // K-nary Heaps
- //
- // S. Naeher 1990
- //
- //------------------------------------------------------------------------------
-
-
- #include <LEDA/basic.h>
- #include <LEDA/slist.h>
-
-
- typedef int k_heap_item;
-
-
- class K_HEAP {
-
- virtual int cmp(ent& x, ent& y){ return int(x)-int(y); }
- virtual void print_key(ent& x) { Print(x); }
- virtual void print_inf(ent& x) { Print(x); }
-
- int K;
- ent* Key;
- ent* Inf;
- int* Pos;
- int* Item;
-
- SLIST free_items;
-
- int count;
- int max_count;
-
- void rise(int&,ent,ent);
- void sink(int&,ent,ent);
-
-
- public:
-
- K_HEAP(int,int=2);
- ~K_HEAP();
-
- int insert(ent k, ent i);
- int insert0(ent k, ent i);
-
- void decrease_inf(k_heap_item, ent);
-
- void change_key(k_heap_item it, ent k) { Key[Pos[it]] = k; }
-
- ent del_item(k_heap_item);
-
- ent del_min() { return del_item(Item[0]); }
-
- ent key(int it) const { return Key[Pos[it]]; }
- ent inf(int it) const { return Inf[Pos[it]]; }
-
- k_heap_item find_min() const { return (count>0) ? Item[0] : 0; }
-
- int size() const { return count; }
- bool empty() const { return count==0; }
- void clear();
-
- void print();
-
- };
-
- class k_heap : public K_HEAP {
-
- virtual int cmp(ent& x, ent& y){ return int(x)-int(y); }
- virtual void print_key(ent& x) { Print(x); }
- virtual void print_inf(ent& x) { Print(x); }
-
- public:
-
- k_heap(int N,int k=2) : K_HEAP(N,k) {};
- ~k_heap() {};
-
- k_heap_item insert(ent k, int i) { return K_HEAP::insert(k,Ent(i)); };
-
- void decrease_inf(k_heap_item it, int x) { K_HEAP::decrease_inf(it,Ent(x)); };
-
- int inf(k_heap_item it) const { return (int)K_HEAP::key(it); }
-
- };
-
-
- #endif
-