37#ifndef BINARY_HEAP_CLASS_H
38#define BINARY_HEAP_CLASS_H
55template <
class Key_Type>
71template <
class Key_Type>
79 assert(allocated_list);
80 assert(max_number_of_elements > 0);
82 Elements = allocated_list;
83 Max_Number_Of_Elements = max_number_of_elements;
84 Number_Of_Elements = 0;
90 : Max_Number_Of_Elements (max_number_of_elements),
91 Number_Of_Elements (0),
108 Number_Of_Elements = 0;
119 Max_Number_Of_Elements = new_size;
120 Number_Of_Elements = 0;
133 Number_Of_Elements = 0;
134 Max_Number_Of_Elements = 0;
144 return (Number_Of_Elements);
150 return (Max_Number_Of_Elements);
156 return Elements[location];
164 unsigned int i = ++Number_Of_Elements;
167 assert(Number_Of_Elements < Max_Number_Of_Elements);
170 while (Greater_Than(Elements[i / 2], node))
172 Elements[i] = Elements[i / 2];
173 Elements[i]->Set_Heap_Location(i);
185 assert(location < Max_Number_Of_Elements);
187 unsigned int i = location;
191 while (Greater_Than(Elements[i / 2], node))
193 Elements[i] = Elements[i / 2];
194 Elements[i]->Set_Heap_Location(i);
209 if (Number_Of_Elements == 0) {
213 assert(Number_Of_Elements > 0);
217 min_element = Elements[1];
218 if (min_element !=
NULL) {
222 last_element = Elements[Number_Of_Elements];
225 Number_Of_Elements--;
227 for (
unsigned int i = 1; (i * 2) <= Number_Of_Elements; i = child)
231 if ((child != Number_Of_Elements) && (Less_Than(Elements[child + 1], Elements[child])))
237 if (Greater_Than(last_element, Elements[child]))
239 Elements[i] = Elements[child];
240 Elements[i]->Set_Heap_Location(i);
248 Elements[i] = last_element;
251 return (min_element);
271 bool Less_Than_Equal(HeapNodeClass<Key_Type> *op1, HeapNodeClass<Key_Type> *op2)
287 bool Greater_Than(HeapNodeClass<Key_Type> *op1, HeapNodeClass<Key_Type> *op2)
305 HeapNodeClass<Key_Type> **Elements;
308 unsigned int Max_Number_Of_Elements;
311 unsigned int Number_Of_Elements;
HeapNodeClass< Key_Type > * Remove_Min(void)
unsigned int Get_Max_Number_Of_Elements(void)
void Percolate_Up(unsigned int location)
void Insert(HeapNodeClass< Key_Type > *node)
BinaryHeapClass(unsigned int max_number_of_elements)
BinaryHeapClass(HeapNodeClass< Key_Type > **allocated_list, unsigned int max_number_of_elements)
HeapNodeClass< Key_Type > * Peek_Node(unsigned int location)
unsigned int Get_Number_Of_Elements()
void Resize_Array(unsigned int new_size)
virtual void Set_Heap_Location(uint32 location)=0
virtual uint32 Get_Heap_Location(void) const =0
virtual Key_Type Heap_Key(void) const =0