/* * Implementaçâo mista para pilhas. */ #include #include #include "pilha_mista.h" void cria_pilha(Pilha* pilha) { pilha->topo = NULL; } int pilha_vazia(Pilha* pilha) { return pilha->topo == NULL; } void insere_pilha(Pilha* pilha, elem_t elem) { if (pilha_vazia(pilha) || pilha->ind_topo == MAX_ELEM_NO -1){ No_pilha* n = (No_pilha*) malloc (sizeof(No_pilha)); n->prox = pilha->topo; pilha->ind_topo = -1; pilha->topo = n; } pilha->ind_topo++; pilha->topo->vet[pilha->ind_topo] = elem; } elem_t remove_pilha(Pilha* pilha) { elem_t r; if (pilha_vazia(pilha)) { printf("Erro: pilha vazia!\n"); exit(0); } r = pilha->topo->vet[pilha->ind_topo--]; if (pilha->ind_topo == -1) { No_pilha *n; n = pilha->topo; pilha->topo = n->prox; pilha->ind_topo = MAX_ELEM_NO-1; free(n); } return r; } void libera_pilha(Pilha* pilha) { /* Liberar toda a lista */ }