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); } }
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; }