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