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

MultiPlatform

  1. /*******************************************************************************
  2. +
  3. +  LEDA-R  3.2.3
  4. +
  5. +  p_aux_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_PAIRING_AUX_HEAP_H
  12. #define LEDA_PAIRING_AUX_HEAP_H
  13. #include <LEDA/impl/p_heap.h>
  14. // by Markus Neukirch
  15. //
  16. // Implementation following John T. Stasko and Jeffrey Scott Vitter
  17. // ( Communications of the ACM   March 1987 Volume 30 Number 3   S. 234-240 )
  18. class p_aux_heap:public p_heap
  19. {
  20. ph_item* head,*minptr;
  21. int item_count;
  22. virtual int cmp(GenPtr, GenPtr) const {return 0; }
  23. virtual void print_key(GenPtr)  const {}
  24. virtual void print_inf(GenPtr)  const {}
  25. virtual void clear_key(GenPtr&) const {}
  26. virtual void clear_inf(GenPtr&) const {}
  27. virtual void copy_key(GenPtr&)  const {}
  28. virtual void copy_inf(GenPtr&)  const {}
  29.  
  30. virtual int  int_type() const { return 0; }
  31. void do_copy(ph_item*,ph_item*,bool);
  32. ph_item* twopass(ph_item*);
  33. ph_item* multipass(ph_item*);
  34. public:
  35. p_aux_heap();
  36. p_aux_heap(int)     { error_handler(1,"no p_heap(int) constructor");}
  37.         p_aux_heap(int,int) { error_handler(1,"no p_heap(int,int) constructor");}
  38. p_aux_heap(const p_aux_heap& init); // construct
  39. p_aux_heap& operator=(const p_aux_heap&);
  40. ~p_aux_heap() {clear();}
  41. ph_item* insert(GenPtr,GenPtr);
  42. void decrease_key(ph_item*,GenPtr);
  43. ph_item* find_min() const
  44. {return minptr;}
  45. void delete_min_multipass(); // auxiliary version
  46. void delete_min_twopass(); // auxiliary version
  47. GenPtr key(ph_item* x) const {return x->key;}
  48. GenPtr inf(ph_item* x) const {return x->inf;}
  49. void change_inf(ph_item* x,GenPtr inf)
  50. {clear_inf(x->inf);copy_inf(inf);x->inf=inf;}
  51. void del_item(ph_item* x)
  52. {decrease_key(x,minptr->key);delete_min_twopass();}
  53. void clear() 
  54. {p_heap::clear();item_count=0;}
  55. int  size() const { return item_count;}
  56. int  empty() const {return item_count;}
  57. };
  58. #endif