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

MultiPlatform

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