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

MultiPlatform

  1. /* This file has been automatically generated from "r_heap.w"
  2.    by CTANGLE (Version 3.1 [km2c]) */
  3. #include <LEDA/basic.h>
  4. class r_heap_node {
  5.   friend class r_heap;
  6.   GenPtr key; /* key */
  7.   GenPtr inf; /* information */
  8.   int bucket; /* number of bucket containing the node */
  9.   r_heap_node *succ, *pred; /* pointers for list maintenance */
  10.  public:
  11.   r_heap_node(GenPtr k, GenPtr i):
  12.    key(k), inf(i), bucket(0), succ(nil),
  13.    pred(nil) {
  14.   }
  15.    LEDA_MEMORY(r_heap_node)
  16. };
  17. typedef r_heap_node *r_heap_item;
  18. class r_heap {
  19. /* data kept in an |r_heap| */
  20.   int C; /* maximal difference between two keys in the
  21.  * heap */
  22.   r_heap_item *buckets; /* buckets of the |r_heap| */
  23.   int *u; /* upper bounds on the key intervals
  24.  * corresponding to the buckets */
  25.   int B; /* number of buckets */
  26.   int si; /* current number of elements stored in the
  27.  * heap */
  28.   int *bsize; /* table used to (re-)initialize the array
  29.  * |u| or part of it */
  30. /* private functions that facilitate the descriptions of the |r_heap| operations */
  31.   inline void set_bucket_bounds(int min, int upto);
  32.   inline int findbucket(r_heap_item, int);
  33.   void copy_heap(const r_heap &);
  34.   inline void add_item(r_heap_item, int);
  35.   inline void rm_item(r_heap_item);
  36. /* non-public functions concerned with the use of |r_heap| within LEDA */
  37.   virtual void print_key(GenPtr) const {
  38.   }
  39.   virtual void print_inf(GenPtr) const {
  40.   }
  41.   virtual void clear_key(GenPtr &) const {
  42.   }
  43.   virtual void clear_inf(GenPtr &) const {
  44.   }
  45.   virtual void copy_key(GenPtr &) const {
  46.   }
  47.   virtual void copy_inf(GenPtr &) const {
  48.   }
  49.   virtual int int_type() const {
  50.     return 0;
  51.   }
  52.  protected:
  53.    r_heap_node * item(void *p) const {
  54.     return (r_heap_node *) p;
  55.   }
  56.  public:
  57.    r_heap(int C);
  58. /* the maximal difference between two keys in the heap needs to be provided upon initialization */
  59.   r_heap() {
  60.     error_handler(1, "r_heap: must initialize with int C>=0");
  61.   }
  62.   r_heap(const r_heap &);
  63.   r_heap & operator = (const r_heap &);
  64.   virtual ~ r_heap() {
  65.     clear();
  66.   }
  67.   r_heap_item find_min() const;
  68.   r_heap_item insert(GenPtr k, GenPtr i); /* precondition: |k >=
  69.  * key(find_min())| */
  70.   void del_item(r_heap_node * x);
  71.   void del_min();
  72.   void decrease_key(r_heap_node * x, GenPtr k); /* precond.:
  73.  * |key(find_min())<=k<key(x)|
  74.  *  */
  75.   void change_inf(r_heap_node * x, GenPtr i);
  76.   GenPtr key(r_heap_node * x) const {
  77.     return x->key;
  78.   }
  79.   GenPtr inf(r_heap_node * x) const {
  80.     return x->inf;
  81.   }
  82.   void clear();
  83.   int size() const;
  84.   int empty() const;
  85. /* functions that are used by the LEDA iteration macros */
  86.   r_heap_item first_item() const;
  87.   r_heap_item next_item(r_heap_item p) const;
  88.   void print_contents(ostream & chk = cout) const;
  89. };
  90. /* dummy I/O and cmp functions */
  91. inline void Print(const r_heap &, ostream &)
  92. {
  93. }
  94. inline void Read(r_heap &, istream &)
  95. {
  96. }
  97. inline int compare(const r_heap &, const r_heap &)
  98. {
  99.   return 0;
  100. }