堆的建立,维护,插入和删除算法堆的插入算法:直接把结点插入到堆末尾,然后从下往上冒泡到合适的位置;堆的删除算法:把最后一个结点插入删除结点的位置,然后进行一次调整.
void max_heap_insert
(int **par_array
, int item_value
)
{
int index
= 0;
int father_index
= 0;
/*如果超过动态数组大小,则对其内容进行扩充
*/
if(heap_size
+1 > heap_cap_size
)
{
*par_array
= (int *)realloc
(*par_array
, 2*INIT_ARRAY_SIZE
*sizeof
(int));
}
(*par_array
)[heap_size
] = item_value
;
index
= item_value
;
heap_size
++;
while(index
)
{
father_index
= (index
-1)/2;
if((*par_array
)[index
] > (*par_array
)[father_index
])
swap
(&((*par_array
)[index
]), &((*par_array
)[father_index
]));
index
= father_index
;
}
}
void heap_delete
(int par_array
[], int item_value
)
{
int i
= 0;
for(i
= 0; i
< heap_size
; i
++)
{
if(par_array
[i
] == item_value
)
break;
}
par_array
[i
] = par_array
[heap_size
-1];
heap_size
--;
max_heap_adjust
(par_array
, i
);
}