Pilha de Strings (controlo de falha): Difference between revisions
From Wiki**3
No edit summary |
No edit summary |
||
| 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; | ||
Revision as of 13:35, 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--]; }