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