[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, 0 ≤ t ≤ N 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.