Heaps are similar to a partially sorted tree but implemented as an array.
They allow for efficient O(1) lookup of the highest priority item as it will always be the first item of the array.
To create a new heap use Heap.
To add items to the heap, use dzl_heap_insert_val
or insert_vals
to insert in bulk.
To access an item in the heap, use dzl_heap_index
.
To remove an arbitrary item from the heap, use extract_index.
To remove the highest priority item in the heap, use extract.
To free a heap, use unref.
Here is an example that stores integers in a Heap:
static int
cmpint (gconstpointer a,
gconstpointer b)
{
return *(const gint *)a - *(const gint *)b;
}
int
main (gint argc,
gchar *argv[])
{
DzlHeap *heap;
gint i;
gint v;
heap = dzl_heap_new (sizeof (gint), cmpint);
for (i = 0; i < 10000; i++)
dzl_heap_insert_val (heap, i);
for (i = 0; i < 10000; i++)
dzl_heap_extract (heap, &v);
dzl_heap_unref (heap);
}