Ir para conteúdo
Fórum Script Brasil
  • 0

Dúvida sobre filas


Jorge Lima

Pergunta

Bom dia, amigos.

Comecei a utilizar pilhas e filas, mas surgiu uma dúvida. Criei este programinha que insere dados numa fila, mas a função remover (que deveria remover sempre o primeiro elemento da estrutura) não consigo fazê-lo funcionar corretamente. Está removendo como pilha, ou seja, o último a ser inserido é o primeiro a ser removido. Tem alguma solução pra mim? Vou postar meu código logo abaixo, desculpem-me se postar de modo incorreto, pois nunca criei tópicos aqui.

________________________________________________________________________

#include <stdio.h>
#include <stdlib.h>
 #define N 5
 int i = -1;
int j = -1;
int k;
int final;
int fila[N];

int inserir(int dado);
int remover();
int verifica_prox();
int inicializa_fila();

int inserir(int dado)
{
    if (i==N-1)
       {
         printf("\n Todas as posicoes da fila estao ocupadas \n");
         return(0);
       }
    else
       {
                   if (i==-1)
                   {i=0;}
                   
         fila[j+1] = dado;
         j = j+1;
         i = i+1;
         
         return(1);
       }   
}
 int remover()
{
    if (i==-1)
       {
        printf("\nA fila esta vazia. não existe elemento no topo!!!\n");
        return(-1);
       }
    else
       {
                   
        final = fila[i];
        fila[i]=-1;
        j = j - 1; 
        i = i - 1;   
        
        return (final);
       }
}
 int verifica_prox()
{
    if (i==-1)
       {
        printf("\nA fila esta vazia. não existe elementos!!!\n");
        return(-1);
       }
    else
        return(fila[i]);
       
}
 int inicializa_fila()
{
    i = 0; j = 0;
    for (j=0; j<N; j++)
        fila[j] = -1;
    
}
  
  
  
 int main(int argc, char *argv[])
{
  int x, opc, res;
  inicializa_fila();
  do
  {
     printf("\n\n*********  MENU DE OPCOES - FILA ***********\n");
     printf("\n1 - Inserir na Fila");
     printf("\n2 - Remover da Fila");
     printf("\n3 - Verificar o Próximo Elemento da Fila");
     printf("\n4 - Mostrar o Conteudo da Fila");
     printf("\n5 - Sair do programa\n\n");
     printf("Digite a opcao escolhida => ");
     scanf("%d", &opc);
     
     switch (opc)
     {
            case 1:
                       printf("\nDigite o valor do elemento a inserir => ");
                       scanf("%d", &x);
                       res = inserir(x);
                       if (res==1)
                          printf("\nElemento inserido na fila.");
                          printf("%d", fila[i]);
                       else
                          printf("Elemento não inserido. fila Cheia.");
                       break;
                       
            case 2:
                       res = remover();
                       if (res==-1)
                          printf("\nFila vazia.\n");
                       else
                          printf("\nElemento removido da fila com sucesso \n");
                       final = verifica_prox(); 
                       break;
                       
            case 3:
                       res = verifica_prox();
                       if (res ==-1)
                          printf("\nFila vazia.\n");
                       else
                          printf("\nElemento do topo da fila => %d \n",res); 
                       break;
            case 4:
                       if (i==-1)
                           printf("\nFila Vazia!");
                       else
                          {
                           for (j=0;j<=i; j++)
                               printf("Elemento %d da fila = %d\n", j+1, fila[j]);
                          }
                       break;
            case 5:
                       break;
            default:
                       printf("\nDigite valores entre 1 e 5.\n");
                       break;
     }
     
  }
  while (opc!= 5);
  
  
  system("PAUSE"); 
  return 0;
}

______________________________________________________________________________________

Link para o comentário
Compartilhar em outros sites

3 respostass a esta questão

Posts Recomendados

  • 0
Olha, já tentou manipular fila com lista encadeada? Filha e pilha com vetor é muito limitado e ruim!

http://www.ime.usp.br/~pf/algoritmos/aulas/lista.html

Ainda não comecei com listas encadeadas. Na verdade isto é um exercício, e de início é com vetor mesmo. O dilema é fazer a variável i sempre marcar a primeira posição da fila. E quando for remover, remove a posição i. E o j ser a variável que ia contando, até chegar no limite do vetor.

Alguma solução?

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,2k
    • Posts
      652k
×
×
  • Criar Novo...