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;
}
Pergunta
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.
________________________________________________________________________
#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
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.