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

[Enunciado]  Minha solução implementa a pilha pilha[0..t-1] de bytes num vetor pilha[0..N-1].  O parâmetro N é uma constante simbólica.  O elemento no topo da pilha é pilha[t-1]. Portanto, 0tN e a pilha está vazia se t vale 0.

As variáveis pilha e t 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 à pilha através das funções definidas no módulo.

Eis o arquivo  pilhadechars.c  que implementa o módulo:

#define N 100

static char pilha[N];
static int t;

void criapilha (void) {
   t = 0; 
}

void empilha (char y) {
   pilha[t++] = y;
}

char desempilha (void) {
   return pilha[--t];
} 

int pilhavazia (void) {
   return t <= 0;
}

int pilhacheia (void) {
   return t > N;
}

Supõe-se que desempilha nunca será invocada com a pilha vazia e que empilha nunca será invocada com a pilha cheia.

Segue o arquivo  pilhadechars.h  que serve de interface entre o usuário e a implementação pilhadechars.c:

void criapilha (void);
void empilha (char y);
char desempilha (void);
int pilhavazia (void);
int pilhacheia (void);

Essa implementação de pilha é um tanto grosseira. Veja uma implementação melhor mais adiante.