Módulo de implementação de uma fila (versão 1)

[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.