Ir ao conteúdo
  • Cadastre-se

C Fila de prioridade heap em c


Igor Vargas

Posts recomendados

Olá estou tentando implementar uma fila de prioridade, mas a minha função de inserção não esta funcionando.

#include <stdio.h>
#include <stdlib.h>
#define MAX 10

void insercao(int vet[MAX],int i){
    int cont=-1;
    cont++;
    vet[cont]=i;
    
}

void troca(int vet[MAX],int a, int b){
    int aux;
    aux   = vet[a];
    vet[a] = vet[b];
    vet[b] = aux;
}


void pai(int vet[MAX], int i){
    while( i > 0 && vet[i]<vet[i/2]){
        troca(vet,i,i/2);
        i = i/2;
    }
}


void imprime(int vet[MAX]){
    int x;
    for(x = 0; x<MAX; x++){
        printf("[%d]-",vet[x]);
    }
}



int vet[MAX];
main(){
printf("Digite um Numero na heap:");
insercao(vet,10);
insercao(vet,35);
insercao(vet,30);
imprime(vet);
    
    
    
}

 

Link para o comentário
Compartilhar em outros sites

@Igor Vargas Olá!

― Vejamos ... então o problema no algoritmo é que a variável que guarda o valor do índice está sendo reiniciada cada chamada da função de inserção. Bom é que essa variável não fique restrita a função, e melhor, que acompanhe a sua lista para onde ela for. Daí como estamos lhe dando com listas estáticas vou recomendar que use a primeira posição da listas (índice: 0) para guarda o índice.

 

Veja isso ...

 

Estrutura de pilha e célula

typedef int celula; /**< definir tipo celula */
typedef celula lista[LIST_MAX + 1]; /**< definir tipo lista (estática) */

 

Função inserção

/** inserir célula na lista */
void insercao(lista lis, celula cel)
{
    /*  Antes da inserção, testa-se o estado da lista [cheio, não cheio]
        o procedimento é bem simples; compara-se o índice da lista com o limite
        de toda lista se igual então retorna (-1) 
        senão então é feita a inserção da célula na lista, neste caso, é feita 
        na primeira posição que está livre. */
    lis[0] == LIST_MAX ? (-1) : (lis[++lis[0]]= cel);
}

 

Função main

/** Principal função de um programa escrito em c */
int main(void)
{
    lista mlista = { 0, }; /*  minha lista iniciada; pode ser via função também */
    
    /*  Inserir neste caso não é diferente de vetor[?]= ? */
    insercao(mlista, 16); /*  vetor[?]= 16 */
    insercao(mlista, 20); /*  vetor[?]= 20 */
    insercao(mlista, 30); /*  vetor[?]= 30 */
    insercao(mlista, 40); /*  vetor[?]= 40 */
    
    return 0; /**< finalizando main. */
}

Você concorda com isso?

Algo a acrescentar, pode falar.

 

 

UPDATE:

Troca (IF) por ?:

  • Curtir 2
Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...