Ir ao conteúdo

Posts recomendados

Postado

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);
    
    
    
}

 

Postado

@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

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...

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!