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;
}
Question
Jorge Lima
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.
________________________________________________________________________
______________________________________________________________________________________
Link to comment
Share on other sites
3 answers to this question
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.