bool Heap::insert (int id, float chave){ /*insere no final e sobe o elemento*/ //if (size+1<maximo && id<maximo && auxID[id]<maximo && auxHeap[auxID[id]]!=id){ if (size+1<maximo ){ heap[size+1]=chave; auxHeap[size+1] = id; size++; subir(size); return true; } else return false; }
/* recebe um vetor e corrige ele de forma a transforma-lo em um max-heap */ void corrigirMaxHeap(Heap **heap) { if(*heap == NULL) { return; } int i; for(i = 0; i < (*heap)->size; i++) { subir(heap, i); } }
void inserirHeap(Heap **heap, int k) { if(*heap == NULL) { inicializarHeap(heap); } if((*heap)->size == 0) { (*heap)->size = 1; (*heap)->h = inicializarVetor(1); (*heap)->h[0] = k; } else { (*heap)->size += 1; (*heap)->h = realocarVetor((*heap)->h, (*heap)->size); (*heap)->h[(*heap)->size - 1] = k; subir(heap, (*heap)->size - 1); } }
void Heap::subir(int i){ int pai = i/2; if (pai>0){ /*vetor com size+1 posições*/ if (maiorQuefloat(heap[pai],heap[i])==true){ float aux1 = heap[i]; heap[i] = heap[pai]; heap[pai] = aux1; int aux = auxHeap[i]; auxHeap[i] = auxHeap[pai]; auxHeap[pai] = aux; subir(pai); } } //if (auxHeap[i]>=0) auxID[auxHeap[i]] = i; }
/* Insere um elemento do heap min-max. */ void inserir( HeapMinMax *heapMinMax, int valor ) { if ( heapMinMax->tamanho < TAM_MAX_HEAP ) { heapMinMax->tamanho++; heapMinMax->valores[heapMinMax->tamanho] = valor; subir( heapMinMax, heapMinMax->tamanho ); } else { printf( "Heap min-max cheio - Overflow!" ); exit( 1 ); } }