struct MinHeap{
int size;
int* array;
};
void minHeapify(struct MinHeap* minHeap, int idx)
{
int smallest, left, right;
smallest = idx;
left = 2 * idx + 1;
right = 2 * idx + 2;
if (left < minHeap->size && minHeap->array[left]->key < minHeap-
>array[smallest]->key )
smallest = left;
if (right < minHeap->size && minHeap->array[right]->key < minHeap-
>array[smallest]->key )
smallest = right;
if (smallest != idx)
{
// The nodes to be swapped in min heap
MinHeapNode *smallestNode = minHeap->array[smallest];
MinHeapNode *idxNode = minHeap->array[idx];
// Swap positions
minHeap->pos[smallestNode->v] = idx;
minHeap->pos[idxNode->v] = smallest;
// Swap nodes
swapMinHeapNode(&minHeap->array[smallest], &minHeap->array[idx]);
minHeapify(minHeap, smallest);
}
}
它显示&#39; - &gt;&#39;的无效类型参数。 (在“minheapify”功能中有&#39; int&#39;)&#39; - &gt;&#39;用来。请告诉我该怎么做,因为其他功能运作良好。
答案 0 :(得分:2)
你有
minHeap->array[left]->key
其中minHeap
是指向struct MinHeap
的类型指针
因此minheap->
访问structMinHeap
的成员。
由于minHeap->array
,所访问的成员为array
,其类型为int
的指针。
使用[left]
,您将该指针视为数组,这是可以的。结果是int
那么你应用下一个->
应该是一个指针,但是int
。
这是编译器告诉你的。
答案 1 :(得分:1)
minHeap->array[left]
是整数值(不是指向结构的指针),因此minHeap->array[left]->key
会产生编译错误。 MinHeapNode *smallestNode = minHeap->array[smallest];
将int
转换为MinHeapNode *,这可能不是int