0
我正在研究二進制堆的C實現,其中最小的元素位於樹的基部而不是最大的位置。然後,樹中的每個下一個元素都比前一個元素大。C:刪除二進制堆的最小元素
我的問題是當我刪除堆的最小元素。這裏是我定義一個二進制堆,初始化一個,並刪除最小元素的代碼。
struct BinaryHeap
{
int capacity;
int size;
int *heap;
};
void init_heap(struct BinaryHeap *heap_ptr, int capacity)
{
heap_ptr->capacity = capacity;
heap_ptr->size = 0;
double n = ceil(pow(2, log10(capacity)/log10(2)));
heap_ptr->heap = (int *)malloc(n*sizeof(int));
}
int remove_heap(struct BinaryHeap *heap_ptr)
{
if (heap_ptr->size > 0)
{
int min_item = heap_ptr->heap[1];
heap_ptr->heap[1] = heap_ptr->heap[heap_ptr->size];
heap_ptr->size--;
heap_ptr->heap[1] = NULL; // I get a warning here
if (heap_ptr->size > 0)
{
heapify(heap_ptr, 1); // helper function which percolates the heap after removal
}
return min_item;
}
return 0;
}