我已經在C中實現了一個最小堆。更改C中堆元素的值
我的堆是一個結構數組。我根據結構中成員'長度'的值將元素排列在堆中。在我的程序中,我必須動態修改一些成員的「長度」。修改此值後,我的堆已被重建。我在這個重建部分發現困難。
我的代碼:
typedef struct edge{
int source;
int dest;
int length;
}edge_st;
typedef struct heap{
edge_st* edge[100];
int size;
}heap;
的代碼重新調整看起來象下面這樣:
void modifyHeap(heap* h, int ref, int newval)
{
int i;
for(i=0; i<h->size; i++)
{
if(h->edge[i]->source == ref)
{
if(h->edge[i]->length==INT_MAX)
{
h->edge[i]->length = 0;
}
h->edge[i]->length = h->edge[i]->length+newval;
break;
}
}
heapify(h,0,h->size);
}
什麼我做的是搜索與參考結構,改變其長度值。 更改後,我試着再次做一次heapify,但它不起作用,因爲我更改的元素可能不是根(0)的直接子元素。如果我這樣做
heapify(h,i,h->size);
這也不起作用,因爲可能沒有任何孩子對我。
有沒有其他辦法解決這個問題?
謝謝。它的工作 – 2014-12-07 09:23:18