Exemple #1
0
void insert_element(int i) {
    int max_top, min_top;
    if(max_heap.size == min_heap.size) {
        min_top = *((int*)heap_top(&min_heap));
        if(i <= min_top) {
            heap_insert(&max_heap,&i);
        }
        else {
            free(heap_erase(&min_heap));
            heap_insert(&min_heap,&i);
            heap_insert(&max_heap,&min_top);
        }
        free(min_top);
    }
    else {
        //max_heap.size is greater
        max_top = *((int*)heap_top(&max_heap));
        if(i >= max_top) {
            heap_insert(&min_heap,&i);
        }
        else {
            free(heap_erase(&max_heap));
            heap_insert(&max_heap,&i);
            heap_insert(&min_heap,&max_top);
        }
        free(max_top);
    }
}
Exemple #2
0
int main()
{
    int i;
    int* val;
    int* data;
    int* key;
    struct heap_t* heap;
    
    heap = heap_init(heap_cmp_func);
    assert(heap);

    data = (int*)MALLOC(sizeof(int) * LOOP);
    key = (int*)MALLOC(sizeof(int) * LOOP);
    for(i=0; i<LOOP; i++)
    {
        data[i] = rand() % (LOOP * 2);
        key[i] = heap_insert(heap, &data[i]);
        printf("%d ", data[i]);

        //_heap_debug(heap);
    }
    printf("\n");

    for(i = 0; i < LOOP; i++)
    {
        val = (int*)heap_erase(heap, key[i]);
        printf("%d ", *val);
        //_heap_debug(heap);
    }
/*
    while(heap_count(heap) > 0)
    {
        val = (int*)heap_pop(heap);
        printf("%d ", *val);
        _heap_debug(heap);
    }
    printf("\n");
*/
    FREE(data);
    FREE(key);
    heap_release(heap);

    getchar();
    return 0;
}