Pilha de Strings (controlo de falha)
From Wiki**3
Esta pilha de strings é semelhante a uma pilha simples. A diferença é a possibilidade de se poder saber do sucesso da operação push.
#define TAMANHO 5
enum resultado { FALHA, SUCESSO };
char *pilha[TAMANHO];
unsigned long topo = -1;
unsigned char vazio() { return topo == -1; }
unsigned char cheio() { return topo == TAMANHO - 1; }
unsigned nframes() { return topo+1; }
O retorno da função push indica o sucesso ou falha através de um dos valores do enumerado resultado. Notar a reserva de memória, através de malloc: é da responsabilidade do cliente da pilha a libertação da memória aqui reservada.
enum resultado push(char *s) {
if (s == NULL || cheio()) return FALHA;
else {
char *frame = (char *)malloc((1 + strlen(s)) * sizeof(char));
if (frame == NULL) return FALHA;
pilha[++topo] = frame;
strcpy(frame, s);
return SUCESSO;
}
}
A operação pop limita-se a retornar o ponteiro para o elemento do topo da pilha (ou NULL, caso esteja vazia).
char *pop() { return vazio() ? NULL : pilha[topo--]; }