堆的插入和删除

tech2022-12-25  75

堆的建立,维护,插入和删除算法堆的插入算法:直接把结点插入到堆末尾,然后从下往上冒泡到合适的位置;堆的删除算法:把最后一个结点插入删除结点的位置,然后进行一次调整. 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); }
最新回复(0)