#include <iostream>
using namespace std;
template <class TD>
class STOS
{
struct element
{
TD dana;
element* nast;
element(TD x, element* w)
{
dana = x;
nast = w;
}
};
element* wierzch;
public:
STOS()
{
wierzch = NULL;
}
bool Pusty() const
{
return wierzch == NULL;
}
void DoStosu(TD d)
{
wierzch = new element(d, wierzch);
}
TD ZeStosu();
~STOS();
};
template <class TD>
TD STOS<TD>::ZeStosu()
{
TD rob = wierzch->dana;
element* t = wierzch->nast;
delete wierzch;
wierzch = t;
return rob;
}
template <class TD>
STOS<TD>::~STOS()
{
while (wierzch != NULL)
ZeStosu();
}
int main()
{
STOS<int> s;
s.DoStosu(5);
s.DoStosu(-11);
s.DoStosu(34);
while (!s.Pusty())
{
cout << s.ZeStosu() << endl;
}
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKdGVtcGxhdGUgPGNsYXNzIFREPgpjbGFzcyBTVE9TIAp7CiAgICBzdHJ1Y3QgZWxlbWVudCAKICAgIHsKICAgICAgICBURCBkYW5hOwogICAgICAgIGVsZW1lbnQqIG5hc3Q7CiAgICAgICAgZWxlbWVudChURCB4LCBlbGVtZW50KiB3KQogICAgICAgIHsKICAgICAgICAgICAgZGFuYSA9IHg7CiAgICAgICAgICAgIG5hc3QgPSB3OwogICAgICAgIH0KICAgIH07CgogICAgZWxlbWVudCogd2llcnpjaDsKCnB1YmxpYzoKICAgIFNUT1MoKQogICAgewogICAgICAgIHdpZXJ6Y2ggPSBOVUxMOwogICAgfQoKICAgIGJvb2wgUHVzdHkoKSBjb25zdAogICAgewogICAgICAgIHJldHVybiB3aWVyemNoID09IE5VTEw7CiAgICB9CgogICAgdm9pZCBEb1N0b3N1KFREIGQpCiAgICB7CiAgICAgICAgd2llcnpjaCA9IG5ldyBlbGVtZW50KGQsIHdpZXJ6Y2gpOwogICAgfQoKICAgIFREIFplU3Rvc3UoKTsKICAgIH5TVE9TKCk7Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgVEQ+ClREIFNUT1M8VEQ+OjpaZVN0b3N1KCkKewogICAgVEQgcm9iID0gd2llcnpjaC0+ZGFuYTsKICAgIGVsZW1lbnQqIHQgPSB3aWVyemNoLT5uYXN0OwogICAgZGVsZXRlIHdpZXJ6Y2g7CiAgICB3aWVyemNoID0gdDsKICAgIHJldHVybiByb2I7Cn0KCnRlbXBsYXRlIDxjbGFzcyBURD4KU1RPUzxURD46On5TVE9TKCkKewogICAgd2hpbGUgKHdpZXJ6Y2ggIT0gTlVMTCkKICAgICAgICBaZVN0b3N1KCk7Cn0KCmludCBtYWluKCkKewoJU1RPUzxpbnQ+IHM7CglzLkRvU3Rvc3UoNSk7CglzLkRvU3Rvc3UoLTExKTsKCXMuRG9TdG9zdSgzNCk7Cgl3aGlsZSAoIXMuUHVzdHkoKSkKCXsKCQljb3V0IDw8IHMuWmVTdG9zdSgpIDw8IGVuZGw7Cgl9CgkKICAgIHJldHVybiAwOwp9