m_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. +  m_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_M_HEAP_H
  12. #define LEDA_M_HEAP_H
  13. //------------------------------------------------------------------------------
  14. // m_heap : monotonic heaps 
  15. //
  16. // a) the sequence of minimum keys (over time) is monotonic (non-decreasing)
  17. // b) the difference of minimum and maximum key is bounded by a constant M
  18. //
  19. // Implementation: cyclic array of lists
  20. //
  21. // Stefan Naeher  (1991)
  22. //------------------------------------------------------------------------------
  23. #include <LEDA/basic.h>
  24. #include <LEDA/list.h>
  25. typedef list_item m_heap_item;
  26. class m_heap {
  27.     int start;
  28.     int offset;
  29.     int M;
  30.     int count;
  31.     list<GenPtr> L;
  32.     list_item*   T;
  33. virtual void copy_inf(GenPtr&)  const {}
  34. virtual void clear_inf(GenPtr&) const {}
  35. virtual void print_inf(GenPtr x) const { cout << x; }
  36. protected:
  37. m_heap_item item(void* p) const { return (m_heap_item)p; }
  38. public:
  39. m_heap_item insert(GenPtr,GenPtr);
  40. m_heap_item find_min() const;
  41. m_heap_item first_item() const;
  42. m_heap_item next_item(m_heap_item) const;
  43. GenPtr       del_min();
  44. void change_key(m_heap_item,GenPtr);
  45. void decrease_key(m_heap_item it,GenPtr x) { change_key(it,x); }
  46. void change_inf(m_heap_item it, GenPtr x)  { copy_inf(x); L[it] = x; };
  47. void del_item(m_heap_item);
  48. void clear();
  49. GenPtr inf(m_heap_item it) const { return L.inf(it); }
  50. GenPtr key(m_heap_item) const
  51. { error_handler(1,"m_heap::key not implemented");
  52.   return 0; 
  53.  }
  54. int    size()   const     { return count; }
  55. int    empty()  const     { return count==0; }
  56. void   print() const;
  57.  m_heap(int M=1024);         
  58.  m_heap(int,int) { error_handler(1,"illegal constuctor"); }
  59. virtual ~m_heap() { delete T; }
  60. // still to do: copy operations
  61.  m_heap& operator=(const m_heap&) { return *this; }
  62.  m_heap(const m_heap&) {}
  63. };
  64. #endif