int main(int argc, char *argv[]) { struct binheap uut; binheap_init(&uut, cmp, sizeof(int), 0, realloc); assert(binheap_isempty(&uut)); binheap_destroy(&uut); return 0; }
int main(int argc, char *argv[]) { binheap_t h; int32_t a[1024]; int32_t i, j, r; int32_t parent, child; binheap_node_t *nodes[1024]; for (i = 0; i < 1024; i++) { a[i] = 1024 - i; } binheap_init(&h, compare_int, NULL); for (i = 0; i < 1024; i++) { binheap_insert(&h, a + i); } for (i = 0; i < 1024; i++) { parent = (i - 1) / 2; child = (2 * i) + 1; if (!i) { if (*(int *) h.array[i]->datum > *(int *) h.array[child]->datum || *(int *) h.array[i]->datum > *(int *) h.array[child + 1]->datum) { printf("Error follows:\n"); } printf("%4d: %4d %4d %4d\n", h.array[i]->index, *(int *) h.array[i]->datum, *(int *) h.array[child]->datum, *(int *) h.array[child + 1]->datum); } else if (i < (h.size - 1) / 2) { if (*(int *) h.array[i]->datum < *(int *) h.array[parent]->datum || *(int *) h.array[i]->datum > *(int *) h.array[child]->datum || *(int *) h.array[i]->datum > *(int *) h.array[child + 1]->datum) { printf("Error follows:\n"); } printf("%4d: %4d %4d %4d %4d\n", h.array[i]->index, *(int *) h.array[parent]->datum, *(int *) h.array[i]->datum, *(int *) h.array[child]->datum, *(int *) h.array[child + 1]->datum); } else { if (*(int *) h.array[i]->datum < *(int *) h.array[parent]->datum) { printf("Error follows:\n"); } printf("%4d: %4d %4d\n", h.array[i]->index, *(int *) h.array[parent]->datum, *(int *) h.array[i]->datum); } } binheap_delete(&h); binheap_init_from_array(&h, a, sizeof (*a), 1024, compare_int, NULL); for (i = 0; i < 1024; i++) { parent = (i - 1) / 2; child = (2 * i) + 1; if (!i) { if (*(int *) h.array[i]->datum > *(int *) h.array[child]->datum || *(int *) h.array[i]->datum > *(int *) h.array[child + 1]->datum) { printf("Error follows:\n"); } printf("%4d: %4d %4d %4d\n", h.array[i]->index, *(int *) h.array[i]->datum, *(int *) h.array[child]->datum, *(int *) h.array[child + 1]->datum); } else if (i < (h.size - 1) / 2) { if (*(int *) h.array[i]->datum < *(int *) h.array[parent]->datum || *(int *) h.array[i]->datum > *(int *) h.array[child]->datum || *(int *) h.array[i]->datum > *(int *) h.array[child + 1]->datum) { printf("Error follows:\n"); } printf("%4d: %4d %4d %4d %4d\n", h.array[i]->index, *(int *) h.array[parent]->datum, *(int *) h.array[i]->datum, *(int *) h.array[child]->datum, *(int *) h.array[child + 1]->datum); } else { if (*(int *) h.array[i]->datum < *(int *) h.array[parent]->datum) { printf("Error follows:\n"); } printf("%4d: %4d %4d\n", h.array[i]->index, *(int *) h.array[parent]->datum, *(int *) h.array[i]->datum); } } while (!binheap_is_empty(&h)) { binheap_remove_min(&h); for (i = 0; i < h.size; i++) { parent = (i - 1) / 2; child = (2 * i) + 1; if (h.size == 1) { printf("%4d: %4d\n", h.array[i]->index, *(int *) h.array[i]->datum); } else if (!i) { if (*(int *) h.array[i]->datum > *(int *) h.array[child]->datum || *(int *) h.array[i]->datum > *(int *) h.array[child + 1]->datum) { printf("Error follows:\n"); } printf("%4d: %4d %4d %4d\n", h.array[i]->index, *(int *) h.array[i]->datum, *(int *) h.array[child]->datum, *(int *) h.array[child + 1]->datum); } else if (i < (h.size - 1) / 2) { if (*(int *) h.array[i]->datum < *(int *) h.array[parent]->datum || *(int *) h.array[i]->datum > *(int *) h.array[child]->datum || *(int *) h.array[i]->datum > *(int *) h.array[child + 1]->datum) { printf("Error follows:\n"); } printf("%4d: %4d %4d %4d %4d\n", h.array[i]->index, *(int *) h.array[parent]->datum, *(int *) h.array[i]->datum, *(int *) h.array[child]->datum, *(int *) h.array[child + 1]->datum); } else { if (*(int *) h.array[i]->datum < *(int *) h.array[parent]->datum) { printf("Error follows:\n"); } printf("%4d: %4d %4d\n", h.array[i]->index, *(int *) h.array[parent]->datum, *(int *) h.array[i]->datum); } } } binheap_delete(&h); binheap_init(&h, compare_int, NULL); for (i = 0; i < 1024; i++) { nodes[i] = binheap_insert(&h, a + i); } for (i = 0; i < 1024; i++) { printf("%d\n", *(int *) nodes[i]->datum); } for (j = 0; j < 1; j++) { r = 1020; a[r] = 0; binheap_decrease_key(&h, nodes[r]); for (i = 0; i < h.size; i++) { parent = (i - 1) / 2; child = (2 * i) + 1; if (h.size == 1) { printf("%4d: %4d\n", h.array[i]->index, *(int *) h.array[i]->datum); } else if (!i) { if (*(int *) h.array[i]->datum > *(int *) h.array[child]->datum || *(int *) h.array[i]->datum > *(int *) h.array[child + 1]->datum) { printf("Error follows:\n"); } printf("%4d: %4d %4d %4d\n", h.array[i]->index, *(int *) h.array[i]->datum, *(int *) h.array[child]->datum, *(int *) h.array[child + 1]->datum); } else if (i < (h.size - 1) / 2) { if (*(int *) h.array[i]->datum < *(int *) h.array[parent]->datum || *(int *) h.array[i]->datum > *(int *) h.array[child]->datum || *(int *) h.array[i]->datum > *(int *) h.array[child + 1]->datum) { printf("Error follows:\n"); } printf("%4d: %4d %4d %4d %4d\n", h.array[i]->index, *(int *) h.array[parent]->datum, *(int *) h.array[i]->datum, *(int *) h.array[child]->datum, *(int *) h.array[child + 1]->datum); } else { if (*(int *) h.array[i]->datum < *(int *) h.array[parent]->datum) { printf("Error follows:\n"); } printf("%4d: %4d %4d\n", h.array[i]->index, *(int *) h.array[parent]->datum, *(int *) h.array[i]->datum); } } } binheap_delete(&h); return 0; }