Ois,
O que você acham da implementação a seguir de um pilha de objetos de tipo Item através de uma lista encadeada com cabeça?
Tendo em vista como foi implementada a operação empilhar (stachPush()) como deve ser feita a operação desempilhar (stackPop())?
/*
* PILHA: uma implementacao com lista encadeada com cabeca
*/
typedef struct stackNode* Link;
struct stackNode {
Item conteudo;
Link prox;
};
static Link topo;
static void *mallocSafe (unsigned int n);
void
stackInit(int n)
{
topo = (Link) mallocSafe(sizeof *topo);
topo->prox = NULL;
topo->contedo = LIXO;
}
int
stackEmpty()
{
return topo->prox == NULL;
}
void
stackPush(Item item)
{
Link p;
Link nova = (Link) mallocSafe(sizeof *nova);
nova->conteudo = item;
nova->prox = NULL;
for (p = topo; p->prox; p = p->prox);
p->prox = nova;
}
Item
stackPop()
{
/* Completar */
}
Item
stackTop()
{
link p;
/* e discutivel se devemos ou nao fazer o teste a seguir */
if (topo->prox == NULL) /* stackempty() */
{
printf("Putz, nao sei o que estou fazendo!\n");
exit(EXIT_FAILURE);
}
for (p = topo; p->prox; p = p->prox);
return p->conteudo;
}
void
stackFree()
{
while (topo != NULL)
{
Link p = topo;
topo = topo->prox;
free(p);
}
}