Browse Source Download (without any required ccan dependencies)
heap
a simple heap implementation
Emilio G. Cota <cota@braap.org>
Each heap entry is added as a void pointer. This means the implementation does _not_ assume you already have an array of entries. Instead, it keeps an internal array of pointers to those entries.
#include <stdio.h>
#include <ccan/heap/heap.h>
static bool less(const int *i, const int *j)
{
return *i < *j;
}
static bool __less(const void *i, const void *j)
{
return less(i, j);
}
int main(int argc, char *argv[])
{
struct heap *h;
int arr[] = {1, 0, 2};
int i;
h = heap_init(__less);
if (h == NULL) {
perror("heap alloc");
exit(1);
}
for (i = 0; i < 3; i++) {
if (heap_push(h, &arr[i])) {
perror("heap push");
exit(1);
}
}
// should print 0, 1, 2
for (i = 0; i < 3; i++) {
int *v = heap_pop(h);
printf("%d\n", *v);
}
heap_free(h);
return 0;
}
BSD-MIT