Jump to content
Fórum Script Brasil
  • 0

Dúvida sobre filas


Jorge Lima

Question

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 to comment
Share on other sites

3 answers to this question

Recommended Posts

  • 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 to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



  • Forum Statistics

    • Total Topics
      152.2k
    • Total Posts
      652k
×
×
  • Create New...