コード例 #1
0
ファイル: heap.c プロジェクト: gbsf/mc202
Heap CriaHeapAux(int n, funcCompara *comp, void *elems[]) {
  /* Cria um heap vazio; se 'elems' não é nulo, preenche com os
     valores do vetor 'elems' e transforma num heap.
  */
  ImplHeap ih = (ImplHeap) MALLOC(sizeof(RegHeap)+(n-1)*sizeof(void *));

  ih->tamMax = n;
  ih->comp = comp;

  if (!elems) {
    ih->tam = 0;
  } else {
    int i;

    memcpy(ih->vetor, elems, n);
    ih->tam = n;

    /* Transformar numa heap */
    for (i = (ih->tam - 2) / 2; i >= 0; i--)
      Desce(ih, i);
  }
  
  return ih;
  
} /* CriaHeapAux */
コード例 #2
0
ファイル: heap.c プロジェクト: henriquefacioli/mc202
Heap CriaHeapAux(int n, funcCompara *comp, void *elems[]) {
    /* Cria um heap vazio; se 'elems' não é nulo, preenche com os
    valores do vetor 'elems' e transforma num heap.
    */
    int i;
    ImplHeap ih = MALLOC(sizeof(RegHeap)+(n-1)*sizeof(void *));

    ih->tamMax = n;
    ih->tam = 0;
    ih->comp = comp;

    if(elems != NULL){
        /*Copia os valored de elems para o heap*/
        for(i = 0; i < n && elems[i] != NULL; i++){
            ih->vetor[i] = elems[i];
            (ih->tam)++;
        }
        /*Faz a organizacao do heap*/
        for(i = (ih->tam - 2)/2; i >= 0; i--){
            Desce(ih, i);
        }
    }

    return (Heap) ih;

} /* CriaHeapAux */
コード例 #3
0
ファイル: heap.c プロジェクト: gbsf/mc202
void * RemoveHeap(Heap h) {

  ImplHeap ih = h;
  void *ret = NULL;
  if (ih->tam==0) {
    printf("FP vazia\n");
    exit(0);
  }

  ret = ih->vetor[0];
  ih->tam--;
  ih->vetor[0] = ih->vetor[ih->tam];
  Desce(ih, 0);

  return ret;
  
} /* removeHeap */
コード例 #4
0
ファイル: heap.c プロジェクト: henriquefacioli/mc202
void * RemoveHeap(Heap h) {

    ImplHeap ih = (ImplHeap) h;
    void *ret = NULL;

    if (ih->tam == 0) {
        printf("FP vazia\n");
        exit(0);
    }

    ret = ih->vetor[0]; /*Salva em ret o maior valor do Heap*/

    /*Faz o ultimo elemento do vetor ser o primeiro e chama a funcao desce,
      que reorganiza o vetor corretamente*/
    (ih->tam)--;
    ih->vetor[0] = ih->vetor[(ih->tam)];
    Desce(ih, 0);

    return ret;

} /* removeHeap */
コード例 #5
0
ファイル: heap.c プロジェクト: laurocruz/MC202
void * RemoveHeap(Heap h) {
/* Remove e devolve o elemento máximo (de acordo com a função 'comp')
   da FP.  Interrompe a execução do programa se a FP está vazia.
*/
    ImplHeap ih = h;
    void *ret = NULL; /* Armazenarà o elemento a ser removido */

    /* Se o tamanho da Fp for 0, nap ha mais elemento para serem removidos */
    if (ih->tam == 0) {
         printf("FP vazia\n");
         exit(0);
    }

    /* Remove o primeiro elemento da fila e coloca o últimono lugar, descendo-o para seu lugar
     * correto */
    ret = ih->vetor[0];
    ih->vetor[0] = ih->vetor[ih->tam-1];
    ih->tam--;
    Desce(ih, 0);

    return ret;
  
} /* removeHeap */
コード例 #6
0
ファイル: heap.c プロジェクト: laurocruz/MC202
void ConstroiHeap(ImplHeap ih) {
/* Recebe uma lista qualquer e a transforma em uma heap */
    for (int i = (ih->tam-2)/2; i >= 0; i--)
        Desce(ih, i);
} /* Constroi Heap */