[Enunciado] Minha solução implementa a fila de inteiros num vetor fila[0..N-1]. O parâmetro N é uma constante simbólica. O primeiro elemento da fila é fila[p] e o último é fila[u-1]. Portanto, 0 ≤ p ≤ u ≤ N.
As variáveis fila, p e u são globais no módulo. Graças à declaração static, essas variáveis são privadas (ou seja, não são acessíveis diretamente aos usuários do módulo). Os usuários só têm acesso à fila através das funções definidas no módulo.
Eis o arquivo filadeints.c que implementa o módulo:
#include "queueofints.h" #define N 100 static int fila[N]; static int p, u; void criafila (void) { p = u = 0; } void colocanafila (int y) { fila[u++] = y; } int tiradafila (void) { return fila[p++]; } int filavazia (void) { return p >= u; } int filacheia (void) { return u > N; }
Supõe-se que tiradafila nunca será invocada quando a fila estiver vazia e que colocanafila nunca será invocada quando a fila estiver cheia.
Segue o arquivo filadeints.h que serve de interface entre o usuário e a implementação filadeints.c:
void criafila (void); void colocanafila (int y); int tiradafila (void); int filavazia (void); int filacheia (void);
Essa implementação de fila é um tanto grosseira. Veja outro exercício.