Difference between revisions of "Pilha de Strings (controlo de falha)"

From Wiki**3

 
 
(One intermediate revision by the same user not shown)
Line 11: Line 11:
 
   unsigned nframes() { return topo+1; }
 
   unsigned nframes() { return topo+1; }
  
O retorno da função <code>push</code> indica o sucesso ou falha através de um dos valores do enumerado <code>resultado</code>.
+
O retorno da função <code>push</code> indica o sucesso ou falha através de um dos valores do enumerado <code>resultado</code>. Notar a reserva de memória, através de <code>malloc</code>: é da responsabilidade do cliente da pilha a libertação da memória aqui reservada.
  
 
   enum resultado push(char *s) {
 
   enum resultado push(char *s) {
 
     if (s == NULL || cheio()) return FALHA;
 
     if (s == NULL || cheio()) return FALHA;
 
     else {
 
     else {
       char *frame = (char *)malloc((1 + strlen(s)) * sizeof(char));
+
       char *frame = (char *)'''malloc'''((1 + strlen(s)) * sizeof(char));
 
       if (frame == NULL) return FALHA;
 
       if (frame == NULL) return FALHA;
 
       pilha[++topo] = frame;
 
       pilha[++topo] = frame;
Line 27: Line 27:
  
 
   char *pop() { return vazio() ? NULL : pilha[topo--]; }
 
   char *pop() { return vazio() ? NULL : pilha[topo--]; }
 +
 +
== Ver Também ==
 +
 +
* [[Pilha (dimensão variável)]]

Latest revision as of 16:00, 27 May 2005

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