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

Ver Também