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--]; }