C:删除二进制堆的最小元素
我正在研究二进制堆的C实现,其中最小的元素位于树的底部,而不是最大的元素。然后,树中的每个下一个元素都比上一个元素大 我的问题是当我移除堆中最小的元素时。下面是我定义二进制堆、初始化二进制堆和删除最小元素的代码C:删除二进制堆的最小元素,c,C,我正在研究二进制堆的C实现,其中最小的元素位于树的底部,而不是最大的元素。然后,树中的每个下一个元素都比上一个元素大 我的问题是当我移除堆中最小的元素时。下面是我定义二进制堆、初始化二进制堆和删除最小元素的代码 struct BinaryHeap { int capacity; int size; int *heap; }; void init_heap(struct BinaryHeap *heap_ptr, int capacity) { heap_ptr-
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;
}
NULL
用于空指针,而不是整数值。您需要将其设置为其他无法获得的值。例如,如果堆中只能有零或正数,则可以将其设置为负值
如果您的值可以跨越整个整数范围,那么您需要一些其他方法来跟踪未使用的条目。例如,第二个数组包含一个布尔标志,表示
堆中的对应值是否有效。NULL
用于空指针,而不是整数值。您需要将其设置为其他无法获得的值。例如,如果堆中只能有零或正数,则可以将其设置为负值
如果您的值可以跨越整个整数范围,那么您需要一些其他方法来跟踪未使用的条目。例如,让第二个数组包含一个布尔标志,说明堆中的对应值是否有效