bin_heap.h
上传用户:gzelex
上传日期:2007-01-07
资源大小:707k
文件大小:2k
开发平台:

MultiPlatform

  1. /*******************************************************************************
  2. +
  3. +  LEDA-R  3.2.3
  4. +
  5. +  bin_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_BIN_HEAP_H
  12. #define LEDA_BIN_HEAP_H
  13. //------------------------------------------------------------------------------
  14. // binary Heaps
  15. //
  16. // S. Naeher (1993)
  17. //
  18. //------------------------------------------------------------------------------
  19. #include <LEDA/basic.h>
  20. class bin_heap_elem
  21. {
  22.   friend class bin_heap;
  23.   GenPtr key;
  24.   GenPtr inf;
  25.   int index;
  26.   bin_heap_elem(GenPtr k, GenPtr i, int pos) { key = k; inf = i; index = pos; }
  27.   LEDA_MEMORY(bin_heap_elem)
  28. };
  29. typedef bin_heap_elem* bin_heap_item;
  30. class bin_heap  {
  31. virtual int  cmp(GenPtr, GenPtr) const { return 0; }
  32. virtual void copy_key(GenPtr&)   const {}
  33. virtual void copy_inf(GenPtr&)   const {}
  34. virtual void clear_key(GenPtr&)  const {}
  35. virtual void clear_inf(GenPtr&)  const {}
  36. virtual void print_key(GenPtr)   const {}
  37. virtual void print_inf(GenPtr)   const {}
  38. virtual int  int_type() const { return 0; }
  39. int          count;
  40. int          max_size;
  41. bin_heap_item* HEAP;
  42. void rise(int,bin_heap_item);
  43. void sink(int,bin_heap_item);
  44. protected:
  45. bin_heap_item item(GenPtr p) const { return bin_heap_item(p); }
  46. public:
  47. bin_heap_item insert(GenPtr, GenPtr);
  48. bin_heap_item find_min()  const      { return HEAP[1];  }
  49. bin_heap_item first_item() const     { return HEAP[1]; }
  50. bin_heap_item next_item(bin_heap_item it) const { return HEAP[it->index+1];}
  51. void decrease_key(bin_heap_item, GenPtr);
  52. void change_inf(bin_heap_item, GenPtr);
  53. void del_item(bin_heap_item);
  54. void del_min() { del_item(find_min()); }
  55. GenPtr key(bin_heap_item it) const { return it->key; }
  56. GenPtr inf(bin_heap_item it) const { return it->inf; }
  57. int  size()    const  { return count;    }
  58. bool empty()   const  { return count==0; }
  59. void clear();
  60. void print();
  61. bin_heap& operator=(const bin_heap&);
  62. bin_heap(int n = 1024);  // default start size 
  63. bin_heap(const bin_heap&);
  64. bin_heap(int,int) {}
  65. virtual ~bin_heap();
  66. };
  67. #endif