#ifndef PILHA_H #define PILHA_H template class Pilha { private: Item * P; int topo; int tam; void resize(); //dobra o tamanho atual de P public: Pilha(); ~Pilha(); void empilha(Item item); Item desempilha(); bool pilhaVazia(); Item topoDaPilha(); }; template Pilha::Pilha(): topo(0), tam(10), P(new Item[10]) {}; template Pilha::~Pilha() { if (P != nullptr) delete [] P; } template void Pilha::empilha (Item item) { if(tam == topo) resize(); P[topo] = item; topo++; } template void Pilha::resize() { Item * novoVetor = new Item[2*tam]; for (int i = 0; i < topo; i++) novoVetor[i] = P[i]; delete[] P; P = novoVetor; tam = tam * 2; } template bool Pilha::pilhaVazia() { return (topo == 0); } template Item Pilha::desempilha() { if (!pilhaVazia()){ topo--; return (P[topo]); } } template Item Pilha::topoDaPilha() { if (!pilhaVazia()) return (P[topo - 1]); } #endif