This is my implementation of a standard computer science heap data structure. Both max and min heaps have been implemented.
A heap data structure stores data in order (non-increasing or non-decreasing). Each data item is stored in a node, which can either have two children, a parent, or both. The order (heap invariant) is maintained from root to base, and while modifying the heap (inserting or removing) the invariant may be violated, in which case we re-heapify from root to base or from a node to the root.
new(heap_type)
- Instantiates a new heap data structure (either min/max heap)size()
- Returns the size of the heapis_empty()
- Returns true only if the heap is empty, false otherwiseinsert(node)
- Inserts a node into the heapremove()
- Removes the root node
Basic usage of a heap data structure to sort the data vector in a min-heap order (non-decreasing)
use heap_ds::heap::{Heap, HeapType};
let data = vec![1, -2, 2, 3, -1, 0];
let mut heap_ds = Heap::new(HeapType::Min);
// insert data into the heap
for node in data {
heap_ds.insert(node)
}
// remove the root node
heap_ds.remove() // -2