dsalglib  1.0.0
dsalglib is a ready to use data structures and algorithms library written in C++ . Object Oriented Template implementations are written.
heap.h
Go to the documentation of this file.
1 //
2 // Created by moghya_s on 10/1/2016.
3 //
4 
5 #ifndef DSALGLIB_HEAP_H
6 #define DSALGLIB_HEAP_H
7 
8 #include "array.h"
9 
10 namespace dsa
11 {
12  template<class type>
13  class maxheap
14  {
15  private:
16  long long int count;
17  array<type> objs;
18  void _reheapup(long long int index)
19  {
20  if(index>0)
21  {
22  long long int parent=(index-1)/2;
23  if(objs[parent]<objs[index])
24  {
25  swapit(objs[parent],objs[index]);
26  _reheapup(parent);
27  }
28  }
29  return ;
30  }
31  void _reheapdown(long long index)
32  {
33 
34  if(index>=0&&index<count)
35  {
36  long long int lc=2*index+1,rc=2*index+2,large;
37  if(lc<count)
38  {
39  large=lc;
40  if(rc<count)
41  {
42  if(objs[lc]<objs[rc])
43  large=rc;
44  }
45  if(objs[index]<objs[large])
46  {
47  swapit(objs[index],objs[large]);
48  _reheapdown(large);
49  }
50  }
51  }
52  return ;
53  }
54 
55  public:
56 
57  maxheap(long long int size=0)
58  {
59  objs.resize(size);
60  count = objs.size();
61  }
62 
63  bool insert(type param)
64  {
65  objs.push_back(param);
66  _reheapup(count);
67  count=objs.size();
68  return true;
69  }
70 
71  type popmax()
72  {
73  type param;
74  if(count>0)
75  {
76  param = objs[0];
77  objs[0]=objs[count-1];
78  objs.pop_back();
79  count=objs.size();
80  _reheapdown(0);
81  }
82  return param;
83  }
84 
85  type getmax()
86  {
87  return objs[0];
88  }
89 
90  long long int size()
91  {
92  return count;
93  }
94 
95  void traverse(void (fun)(type obj))
96  {
97  long long int i;
98  for(i=0;i<count;i++)
99  fun(objs[i]);
100  }
101 
102  void clear()
103  {
104  objs.clear();
105  count=objs.size();
106  }
107  };
108 
109  template<class type>
110  class minheap
111  {
112  private:
113  long long int count;
114  array<type> objs;
115  void _reheapup(long long int index)
116  {
117  if(index>0)
118  {
119  long long int parent=(index-1)/2;
120  if(objs[index]<objs[parent])
121  {
122  swapit(objs[parent],objs[index]);
123  _reheapup(parent);
124  }
125  }
126  return ;
127  }
128 
129  void _reheapdown(long long index)
130  {
131 
132  if(index>=0&&index<count)
133  {
134  long long int lc=2*index+1,rc=2*index+2,less;
135  if(lc<count)
136  {
137  less=lc;
138  if(rc<count)
139  {
140  if(objs[rc]<objs[lc])
141  less=rc;
142  }
143  if(objs[less]<objs[index])
144  {
145  swapit(objs[index],objs[less]);
146  _reheapdown(less);
147  }
148  }
149  }
150  return ;
151  }
152 
153  public:
154 
155  minheap(long long int size=0)
156  {
157  objs.resize(size);
158  count = objs.size();
159  }
160 
161  bool insert(type param)
162  {
163  objs.push_back(param);
164  _reheapup(count);
165  count=objs.size();
166  return true;
167  }
168 
169  type popmin()
170  {
171  type param;
172  if(count>0)
173  {
174  param=objs[0];
175  objs[0]=objs[count-1];
176  objs.pop_back();
177  count=objs.size();
178  _reheapdown(0);
179  }
180  return param;
181  }
182 
183  type getmin()
184  {
185 
186  return objs[0];
187  }
188 
189  long long int size()
190  {
191  return count;
192  }
193 
194  void traverse(void (fun)(type obj))
195  {
196  long long int i;
197  for(i=0;i<count;i++)
198  fun(objs[i]);
199  }
200 
201  void clear()
202  {
203  objs.clear();
204  count=objs.size();
205  }
206 
207 
208  };
209 }
210 #endif //DSALGLIB_HEAP_H
void swapit(T &x, T &y)
Definition: alginc.h:17
bool insert(type param)
Definition: heap.h:161
void resize(long long int newsize)
Definition: array.h:33
Definition: alginc.h:12
type popmax()
Definition: heap.h:71
void traverse(void(fun)(type obj))
Definition: heap.h:95
void clear()
Definition: heap.h:102
void _reheapup(array< type > objs, long long int index)
Definition: heapsort.h:13
void pop_back()
Definition: array.h:78
type getmax()
Definition: heap.h:85
void _reheapdown(array< type > objs, long long index, long long int last)
Definition: heapsort.h:29
long long int size()
Definition: heap.h:90
void clear()
Definition: heap.h:201
long long int size()
Definition: heap.h:189
type getmin()
Definition: heap.h:183
void clear()
Definition: array.h:115
long long int size()
Definition: array.h:98
type popmin()
Definition: heap.h:169
void push_back(type param)
Definition: array.h:69
maxheap(long long int size=0)
Definition: heap.h:57
minheap(long long int size=0)
Definition: heap.h:155
void traverse(void(fun)(type obj))
Definition: heap.h:194
bool insert(type param)
Definition: heap.h:63