k_heap.h
Upload User: gzelex
Upload Date: 2007-01-07
Package Size: 707k
Code Size: 2k
Development Platform:

MultiPlatform

  1. /*******************************************************************************
  2. +
  3. +  LEDA-R  3.2.3
  4. +
  5. +  k_heap.h
  6. +
  7. +  Copyright (c) 1995  by  Max-Planck-Institut fuer Informatik
  8. +  Im Stadtwald, 66123 Saarbruecken, Germany     
  9. +  All rights reserved.
  10. *******************************************************************************/
  11. #ifndef LEDA_KHEAP_H
  12. #define LEDA_KHEAP_H
  13. //------------------------------------------------------------------------------
  14. // k-nary Heaps
  15. //------------------------------------------------------------------------------
  16. #include <LEDA/basic.h>
  17. class k_heap_elem
  18. {
  19.   friend class k_heap;
  20.   GenPtr key;
  21.   GenPtr inf;
  22.   int index;
  23.   k_heap_elem(GenPtr k, GenPtr i, int pos) { key = k; inf = i; index = pos; }
  24.   LEDA_MEMORY(k_heap_elem)
  25. };
  26. typedef k_heap_elem* k_heap_item;
  27. class k_heap  {
  28. virtual int cmp(GenPtr, GenPtr) const { return 0; }
  29. virtual void copy_key(GenPtr&)  const {}
  30. virtual void copy_inf(GenPtr&)  const {}
  31. virtual void clear_key(GenPtr&) const {}
  32. virtual void clear_inf(GenPtr&) const {}
  33. virtual void print_key(GenPtr)  const {}
  34. virtual void print_inf(GenPtr)  const {}
  35. virtual int  int_type() const { return 0; }
  36. int          K;
  37. int          count;
  38. int          max_size;
  39. k_heap_item* HEAP;
  40. void rise(int,k_heap_item);
  41. void sink(int,k_heap_item);
  42. void check(k_heap_item);
  43. protected:
  44. k_heap_item item(GenPtr p) const { return k_heap_item(p); }
  45. public:
  46. k_heap_item insert(GenPtr, GenPtr);
  47. k_heap_item find_min()  const      { return HEAP[1];  }
  48. k_heap_item first_item() const     { return HEAP[1]; }
  49. k_heap_item next_item(k_heap_item it) const { return HEAP[it->index+1];}
  50. void decrease_key(k_heap_item, GenPtr);
  51. void change_inf(k_heap_item, GenPtr);
  52. void del_item(k_heap_item);
  53. void del_min() { del_item(find_min()); }
  54. GenPtr key(k_heap_item it) const { return it->key; }
  55. GenPtr inf(k_heap_item it) const { return it->inf; }
  56. int  size()    const  { return count;    }
  57. bool empty()   const  { return count==0; }
  58. void clear();
  59. void print();
  60. k_heap& operator=(const k_heap&);
  61. k_heap(int n=0,int k=2);  // default: binary heap
  62. k_heap(const k_heap&);
  63. virtual ~k_heap();
  64. };
  65. #endif