#include <iostream>
using namespace std;
template <class T>
class elemento {
public:
T dado;
elemento<T> *prox;
};
template <class T>
class pilha {
private:
elemento<T> *top;
public:
pilha() { top = NULL; }
bool empilha(T);
T topo();
T pop();
bool vazio();
~pilha();
};
template <class T>
pilha<T>::~pilha() {
delete [] top;
}
template <class T>
bool pilha<T>::empilha(T x) {
if (top == NULL) {
top = new elemento<T>;
top->dado = x;
top->prox = NULL;
return true;
} else {
elemento<T> *aux = new elemento<T>;
aux->dado = x;
aux->prox = top;
top = aux;
return true;
}
return false;
}
template <class T>
T pilha<T>::topo() {
if (!vazio()) return top->dado;
return -1; //RETORNA -1 QUANDO A PILHA ESTA VAZIA
}
template <class T>
T pilha<T>::pop() {
if (vazio()) return -1; //RETORNA -1 QUANDO A PILHA ESTA VAZIA
else {
T aux = top->dado;
top = top->prox;
return aux;
}
}
template <class T>
bool pilha<T>::vazio() { return (top==NULL); }
using namespace std;
int main() {
pilha<int> p;
if (!p.vazio()) {
cout<<p.topo()<< endl;
}
p.empilha(1);
cout<<p.pop()<< endl;
p.empilha(2);
cout<<p.pop()<< endl;
p.empilha(3);
cout<<p.pop()<< endl;
p.empilha(4);
cout<<p.pop()<< endl;
p.empilha(5);
cout<<p.pop()<< endl;
p.empilha(6);
p.empilha(7);
p.empilha(8);
cout<<p.pop()<< endl;
p.empilha(9);
p.empilha(10);
p.empilha(11);
p.empilha(12);
p.empilha(13);
cout<<p.pop()<< endl;
p.empilha(14);
cout<<p.topo()<< endl;
cout<<p.pop()<< endl;
cout<<p.pop()<< endl;
cout<<p.pop()<< endl;
cout<<p.pop()<< endl;
cout<<p.pop()<< endl;
cout<<p.pop()<< endl;
cout<<p.pop()<< endl;
cout<<p.pop()<< endl;
}
//https://pt.stackoverflow.com/q/55871/101
I2luY2x1ZGUgPGlvc3RyZWFtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKdGVtcGxhdGUgPGNsYXNzIFQ+CmNsYXNzIGVsZW1lbnRvIHsKCXB1YmxpYzoKCSAgICBUIGRhZG87CiAgICAJZWxlbWVudG88VD4gKnByb3g7Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgVD4KY2xhc3MgcGlsaGEgewpwcml2YXRlOgogICAgZWxlbWVudG88VD4gKnRvcDsKcHVibGljOgogICAgcGlsaGEoKSB7IHRvcCA9IE5VTEw7IH0KICAgIGJvb2wgZW1waWxoYShUKTsKICAgIFQgdG9wbygpOwogICAgVCBwb3AoKTsKICAgIGJvb2wgdmF6aW8oKTsKICAgIH5waWxoYSgpOwp9OwoKdGVtcGxhdGUgPGNsYXNzIFQ+CnBpbGhhPFQ+Ojp+cGlsaGEoKSB7CiAgICBkZWxldGUgW10gdG9wOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgVD4KYm9vbCBwaWxoYTxUPjo6ZW1waWxoYShUIHgpIHsKICAgIGlmICh0b3AgPT0gTlVMTCkgewogICAgICAgIHRvcCA9IG5ldyBlbGVtZW50bzxUPjsKICAgICAgICB0b3AtPmRhZG8gPSB4OwogICAgICAgIHRvcC0+cHJveCA9IE5VTEw7CiAgICAgICAgcmV0dXJuIHRydWU7CiAgICB9IGVsc2UgewogICAgICAgIGVsZW1lbnRvPFQ+ICphdXggPSBuZXcgZWxlbWVudG88VD47CiAgICAgICAgYXV4LT5kYWRvID0geDsKICAgICAgICBhdXgtPnByb3ggPSB0b3A7CiAgICAgICAgdG9wID0gYXV4OwogICAgICAgIHJldHVybiB0cnVlOwogICAgfQogICAgcmV0dXJuIGZhbHNlOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgVD4KVCBwaWxoYTxUPjo6dG9wbygpIHsKICAgIGlmICghdmF6aW8oKSkgcmV0dXJuIHRvcC0+ZGFkbzsKICAgIHJldHVybiAtMTsgLy9SRVRPUk5BIC0xIFFVQU5ETyBBIFBJTEhBIEVTVEEgVkFaSUEKfQoKdGVtcGxhdGUgPGNsYXNzIFQ+ClQgcGlsaGE8VD46OnBvcCgpIHsKICAgIGlmICh2YXppbygpKSByZXR1cm4gLTE7IC8vUkVUT1JOQSAtMSBRVUFORE8gQSBQSUxIQSBFU1RBIFZBWklBCiAgICBlbHNlIHsKICAgICAgICBUIGF1eCA9IHRvcC0+ZGFkbzsKICAgICAgICB0b3AgPSB0b3AtPnByb3g7CiAgICAgICAgcmV0dXJuIGF1eDsKICAgIH0KfQoKdGVtcGxhdGUgPGNsYXNzIFQ+CmJvb2wgcGlsaGE8VD46OnZhemlvKCkgeyByZXR1cm4gKHRvcD09TlVMTCk7IH0KCnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgppbnQgbWFpbigpIHsKICAgIHBpbGhhPGludD4gcDsKICAgIGlmICghcC52YXppbygpKSB7CiAgICAgICAgY291dDw8cC50b3BvKCk8PCBlbmRsOwogICAgfQogICAgcC5lbXBpbGhhKDEpOwogICAgY291dDw8cC5wb3AoKTw8IGVuZGw7CiAgICBwLmVtcGlsaGEoMik7CiAgICBjb3V0PDxwLnBvcCgpPDwgZW5kbDsKICAgIHAuZW1waWxoYSgzKTsKICAgIGNvdXQ8PHAucG9wKCk8PCBlbmRsOwogICAgcC5lbXBpbGhhKDQpOwogICAgY291dDw8cC5wb3AoKTw8IGVuZGw7CiAgICBwLmVtcGlsaGEoNSk7CiAgICBjb3V0PDxwLnBvcCgpPDwgZW5kbDsKICAgIHAuZW1waWxoYSg2KTsKICAgIHAuZW1waWxoYSg3KTsKICAgIHAuZW1waWxoYSg4KTsKICAgIGNvdXQ8PHAucG9wKCk8PCBlbmRsOwogICAgcC5lbXBpbGhhKDkpOwogICAgcC5lbXBpbGhhKDEwKTsKICAgIHAuZW1waWxoYSgxMSk7CiAgICBwLmVtcGlsaGEoMTIpOwogICAgcC5lbXBpbGhhKDEzKTsKICAgIGNvdXQ8PHAucG9wKCk8PCBlbmRsOwogICAgcC5lbXBpbGhhKDE0KTsKICAgIGNvdXQ8PHAudG9wbygpPDwgZW5kbDsKICAgIGNvdXQ8PHAucG9wKCk8PCBlbmRsOwogICAgY291dDw8cC5wb3AoKTw8IGVuZGw7CiAgICBjb3V0PDxwLnBvcCgpPDwgZW5kbDsKICAgIGNvdXQ8PHAucG9wKCk8PCBlbmRsOwogICAgY291dDw8cC5wb3AoKTw8IGVuZGw7CiAgICBjb3V0PDxwLnBvcCgpPDwgZW5kbDsKICAgIGNvdXQ8PHAucG9wKCk8PCBlbmRsOwogICAgY291dDw8cC5wb3AoKTw8IGVuZGw7Cn0KCi8vaHR0cHM6Ly9wdC5zdGFja292ZXJmbG93LmNvbS9xLzU1ODcxLzEwMQ==