Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

viciado

[Resolvido] FILA em c

Recommended Posts

Estou com algumas dúvidas no código:

 

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

typedef struct sPessoa{
        int idade;
        char nome[20+1];
        struct sPessoa *prox;
        }PESSOA;
        
typedef PESSOA* FILA;

void inic(FILA* fila){
     *fila = NULL;
}

void inserir(FILA* fila, int idade, char *nome){
     if(*fila==NULL){
             *fila = (FILA) malloc(sizeof(PESSOA));   //O q faz aqui ??
             if(*fila==NULL) return;
             (*fila)->idade = idade;
             strcpy((*fila)->nome,nome);
             (*fila)->prox = NULL;
                           }
     else inserir(& (*fila)->prox, idade, nome);
}

void apagar(FILA *fila){
     PESSOA *tmp = *fila;
     if(*fila == NULL)
        return;
     *fila = (*fila)->prox;
     free(tmp);      //Pq a variavel tmp ?
}

void listar(FILA fila){
     if(fila==NULL)
        return;
     printf("%d %s \n",fila->idade, fila->nome);
     listar(fila->prox);
}           

int main()
{
  FILA f;
  inic(&f);
  puts("Iniciar:");
  listar(f);
  puts("Inserir:");
  inserir(&f,10,"Tiago");
  inserir(&f,20,"Luisa");
  inserir(&f,30,"Ana");
  puts("Listar 3"); 
  listar(f);
  apagar(&f);
  puts("Listar 2");
  listar(f);
  apagar(&f);
  puts("Listar 1");
  listar(f);
  apagar(&f);
  puts("Listar nada");
  listar(f);
  apagar(&f);
  puts("Listar nada");
  listar(f);
  system("PAUSE");	
  return 0;
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

bom a primeira é alocação dinamica você ainda n sabe sobre o assunto??

 

e sobre o tmp tbm n vi utilidade dele no codigo do jeito q esta;

 

[]s

Compartilhar este post


Link para o post
Compartilhar em outros sites

void apagar(FILA *fila){
     PESSOA *tmp = *fila;
     if(*fila == NULL)
        return;
     *fila = (*fila)->prox;
     free(tmp);      //Pq a variavel tmp ?
}

Sem a variável "tmp" a memória de "*fila" não é libearada.

Note que "*fila" passa a possuir o endereço de outro nó.

A variável "tmp" guarda a posição que deve ser liberada da memória.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ok. Obrigado

 

Na função

 

void inserir(FILA* fila, int idade, char *nome){
     if(*fila==NULL){
             *fila = (FILA) malloc(sizeof(PESSOA));   
             if(*fila==NULL) return;  //O q faz esse if ???
             (*fila)->idade = idade;
             strcpy((*fila)->nome,nome);
             (*fila)->prox = NULL;
                           }
     else inserir(& (*fila)->prox, idade, nome);
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

malloc returna NULL no caso de falha na alocação da memória.

Seria interessante mudar o código para exibir alguma mensagem, indicando que houve um erro!

void inserir(FILA* fila, int idade, char *nome){
     if(*fila==NULL){
             *fila = (FILA) malloc(sizeof(PESSOA));   
             if(*fila==NULL)
             {
                  fputs("Memory Allocation error. Aborting", stderr);
                  exit(1);
             }

             (*fila)->idade = idade;
             strcpy((*fila)->nome,nome);
             (*fila)->prox = NULL;
                           }
     else inserir(& (*fila)->prox, idade, nome);
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.