Skip to content

Instantly share code, notes, and snippets.

@marcoscastro
Created April 21, 2015 22:00
Show Gist options
  • Save marcoscastro/4fc039c7a707f08e6386 to your computer and use it in GitHub Desktop.
Save marcoscastro/4fc039c7a707f08e6386 to your computer and use it in GitHub Desktop.
Programação em C - Fila circular com arranjo
/*
Implementação de uma fila com arranjo circular
Autor: Marcos Castro - www.GeeksBR.com
*/
#include <stdio.h>
#define MAX 5 // máximo de elementos
// dois índices apontando para início e fim da fila
// inicialmente esses índices são iguais a 1
int ini = 0, fim = 0;
// verifica se a fila está vazia
int vazia(int fila[MAX])
{
return (ini == fim);
}
// verifica se a fila está cheia
int cheia(int fila[MAX])
{
/*
uma posição ficará desocupada, pois precisamos
distinguir uma fila cheia de uma fila vazia
*/
return ((fim + 1) % MAX == ini);
}
// insere elemento na fila
int inserir(int fila[MAX], int e)
{
// verifica se a fila está cheia
if(cheia(fila))
{
printf("Fila cheia!!\n");
return 0;
}
fila[fim++] = e; // insere no final da fila
if(fim == MAX)
fim = 0;
return 1;
}
// remnove elemento da fila
int remover(int fila[MAX])
{
// verifica se a fila está vazia
if(vazia(fila))
{
printf("Fila vazia!!\n");
return 0;
}
int e = fila[ini++]; // remove o elemento da fila
if(ini == MAX)
ini = 0;
return e;
}
// mostra a fila
int topo(int fila[MAX])
{
return fila[ini];
}
int main()
{
int fila[MAX];
inserir(fila, 5);
inserir(fila, 10);
inserir(fila, 2);
inserir(fila, 12);
printf("Topo: %d\n", topo(fila)); // imprime 5
inserir(fila, 30); // imprime fila cheia
remover(fila);
// fila: 10 2 12
printf("Topo: %d\n", topo(fila)); // imprime 10
remover(fila);
// fila: 2 12
printf("Topo: %d\n", topo(fila)); // imprime 2
inserir(fila, 20);
// fila: 2 12 20
printf("Topo: %d\n", topo(fila)); // imprime 2
remover(fila);
// fila: 12 20
printf("Topo: %d\n", topo(fila)); // imprime 12
remover(fila);
// fila: 20
printf("Topo: %d\n", topo(fila)); // imprime 20
remover(fila); // remove o 20
// fila: vazia
remover(fila); // imprime fila vazia
inserir(fila, 87);
// fila: 87
printf("Topo: %d\n", topo(fila)); // imprime 87
return 0;
}
@leoneldca
Copy link

Linha 40 pode gerar acesso a endereços fora do array

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment