Ir para conteúdo

POWERED BY:

Arquivado

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

Luiz Picolo

Implementando Filas

Recommended Posts

Galera boa tarde. Estou implementando 3 funções para trabalhar com Filas. Porém esta dando um erro, aparentemente na linha 53, pois quando eu a comento o erro não aparece mais, porém, eu não sei onde estou errando. Se alguém puder ajudar.

 

/*
* File:   main.c
* Author: picolo
*
* Created on 12 de Dezembro de 2012, 23:43
*/

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

/*
*
*/
typedef struct _fila
{
   int dados;
   struct _fila *prox;
} fila;

void enfileirar(int valor, fila **inicio, fila **final)
{
   fila *aux;

   if ((*inicio) == NULL && (*final) == NULL)
   {
       aux = (fila *) malloc(sizeof (fila));
       aux->dados = valor;
       aux->prox = NULL;
       (*inicio) = aux->dados;
       (*final) =  aux->dados;
   }
   else
   {
       aux = (fila *) malloc(sizeof (fila));
       aux->dados = valor;
       aux->prox = (*final);
       (*final) = aux->dados;
   }
}

int desenfileirar(fila **inicio, fila **final)
{
   fila *aux;
   int n = 0;

   if ((*inicio) == NULL && (*final) == NULL)
   {
       printf("A fila esta vazia");
   }
   else if ((*inicio) != (*final))
   {
       aux = (*inicio);
       n = (*inicio)->dados;
       (*inicio) = (*inicio)->prox;
       free(aux);
       return n;
   }
   else
   {
       aux = (*inicio);
       n = (*inicio)->dados;
       (*inicio) = NULL;
       (*final) = NULL;
       free(aux);
       return n;
   }
}

void imprimir(fila *inicio)
{
   while (inicio)
   {
       printf("%d\n", inicio->dados);
       inicio = inicio->prox;
   }

}

int
main(int argc, char** argv)
{
   fila *inicio = NULL;
   fila *final = NULL;

   enfileirar(1, &inicio, &final);
   enfileirar(2, &inicio, &final);
   //enfileirar(3, &inicio, &final);
   //enfileirar(4, &inicio, &final);

   imprimir(inicio);

   //desenfileirar(&inicio, &final);
   return (EXIT_SUCCESS);
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não parei p/ contar as linhas, mas tente um dos dois : (*inicio).dados ou inicio->dados

Compartilhar este post


Link para o post
Compartilhar em outros sites

O erro foi encontrado :D

void enfileirar(int valor, fila **inicio, fila **final)
{
   fila *aux;

   if ((*inicio) == NULL && (*final) == NULL)
   {
       aux = (fila *) malloc(sizeof (fila));
       aux->dados = valor;
       aux->prox = NULL;

       // Aqui se passa a referência e nao o conteúdo
       (*inicio) = aux;
       (*final) =  aux;
   }
   else
   {
       aux = (fila *) malloc(sizeof (fila));
       aux->dados = valor;
       aux->prox = (*final);

       // Aqui se passa a referência e nao o conteúdo 
       (*final) = aux;
   }
}

 

Tópico resolvido.

 

Implementação Completa. Funcionando...

 

/*
* File:   main.c
* Author: picolo
*
* Created on 12 de Dezembro de 2012, 23:43
*/

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

/*
*
*/
typedef struct _fila
{
   int dados;
   struct _fila *prox;
} fila;

void enqueue(int valor, fila **inicio, fila **final)
{
   fila *aux;

   if (((*inicio) == NULL) && ((*final) == NULL))
   {
       aux = (fila *) malloc(sizeof (fila));
       aux->dados = valor;
       aux->prox = NULL;
       (*inicio) = aux;
       (*final) =  aux;
   }
   else
   {
       aux = (fila *) malloc(sizeof (fila));
       aux->dados = valor;
       aux->prox = NULL;
       (*final)->prox = aux;
       (*final) = aux;
   }
}

int dequeue(fila **inicio, fila **final)
{
   fila *aux;
   int n = 0;

   if ((*inicio) == NULL && (*final) == NULL)
   {
       printf("A fila esta vazia");
   }
   else if ((*inicio) != (*final))
   {
       aux = (*inicio);
       n = (*inicio)->dados;
       (*inicio) = (*inicio)->prox;
       free(aux);
       return n;
   }
   else
   {
       aux = (*inicio);
       n = (*inicio)->dados;
       free(aux);
       (*inicio) = NULL;
       (*final) = NULL;
       return n;
   }
}

void list(fila *inicio)
{
   if (inicio == NULL)
   {
       printf("Lista Vazia");
   }
   else {
       while (inicio)
       {
           printf("%d\n", inicio->dados);
           inicio = inicio->prox;
       }
   }
}

int
main(int argc, char** argv)
{
   fila *inicio = NULL;
   fila *final = NULL;
   int retorno, valor = 0;
   int acao = -1;

   while (acao != 20)
   {
       printf("1 - Enqueue\n");
       printf("2 - Dequeue\n");
       printf("3 - List\n");
       printf("4 - Exit\n");
       printf("Digite a aчуo desejada: ");
       scanf("%d", &acao);

       if (acao == 1)
       {
           system("cls");
           printf("Digite o valor a ser enfileirado: ");
           scanf("%d", &valor);
           enqueue(valor, &inicio, &final);
           system("cls");
       }
       else if (acao == 2)
       {
           system("cls");
           retorno = dequeue(&inicio, &final);
           if (retorno != NULL)
           {
               printf("O valor %d foi desinfileirado \n\n", retorno);
           }

       }
       else if (acao == 3)
       {
           system("cls");
           list(inicio);
           printf("\n\n");
       }
       else
       {
           return (EXIT_SUCCESS);
       }
   }


}


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.