#include <iostream>
using namespace std;
template <typename T>
class Stack
{
struct Unit
{
Unit *prev;
T value;
Unit(T value);
};
public:
Stack();
void Push(T value);
int Count();
T Top();
T Pop();
~Stack();
private:
unsigned int count;
Unit *top;
};
template<typename T>
Stack<T>::Unit::Unit(T value)
{
this->value = value;
prev = nullptr;
}
template<typename T>
Stack<T>::Stack()
{
top = nullptr;
count = 0;
std::cout << "The size of each unit is " << sizeof(Unit) << " bytes." << std::endl;
}
template<typename T>
void Stack<T>::Push(T value)
{
if (top == nullptr)
{
top = new Unit(value);
}
else
{
Unit *tmp = new Unit(value);
tmp->prev = top;
top = tmp;
}
count++;
}
template<typename T>
T Stack<T>::Pop()
{
T value = top->value;
Unit *tmp = top->prev;
delete top;
top = tmp;
count--;
return value;
}
template<typename T>
Stack<T>::~Stack()
{
Unit *curr = top;
if (!curr)
{
return;
}
while (curr)
{
Unit* tmp = curr->prev;
delete curr;
curr = tmp;
}
}
int main() {
// your code goes here
Stack<int> myStack;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CmNsYXNzIFN0YWNrCnsKICAgIHN0cnVjdCBVbml0CiAgICB7CiAgICAgICAgVW5pdCAqcHJldjsKICAgICAgICBUIHZhbHVlOwogICAgICAgIFVuaXQoVCB2YWx1ZSk7CiAgICB9OwpwdWJsaWM6CiAgICBTdGFjaygpOwogICAgdm9pZCBQdXNoKFQgdmFsdWUpOwogICAgaW50IENvdW50KCk7CiAgICBUIFRvcCgpOwogICAgVCBQb3AoKTsKICAgIH5TdGFjaygpOwpwcml2YXRlOgogICAgdW5zaWduZWQgaW50IGNvdW50OwogICAgVW5pdCAqdG9wOwoKfTsKCnRlbXBsYXRlPHR5cGVuYW1lIFQ+ClN0YWNrPFQ+OjpVbml0OjpVbml0KFQgdmFsdWUpCnsKICAgIHRoaXMtPnZhbHVlID0gdmFsdWU7CiAgICBwcmV2ID0gbnVsbHB0cjsKfQoKdGVtcGxhdGU8dHlwZW5hbWUgVD4KU3RhY2s8VD46OlN0YWNrKCkKewogICAgdG9wID0gbnVsbHB0cjsKICAgIGNvdW50ID0gMDsKICAgIAogICAgc3RkOjpjb3V0IDw8ICJUaGUgc2l6ZSBvZiBlYWNoIHVuaXQgaXMgIiAgPDwgc2l6ZW9mKFVuaXQpIDw8ICIgYnl0ZXMuIiA8PCBzdGQ6OmVuZGw7Cn0KCnRlbXBsYXRlPHR5cGVuYW1lIFQ+CnZvaWQgU3RhY2s8VD46OlB1c2goVCB2YWx1ZSkKewogICAgaWYgKHRvcCA9PSBudWxscHRyKQogICAgewogICAgICAgIHRvcCA9IG5ldyBVbml0KHZhbHVlKTsKICAgIH0KICAgIGVsc2UKICAgIHsKICAgICAgICBVbml0ICp0bXAgPSBuZXcgVW5pdCh2YWx1ZSk7CiAgICAgICAgdG1wLT5wcmV2ID0gdG9wOwogICAgICAgIHRvcCA9IHRtcDsKICAgIH0KICAgIGNvdW50Kys7Cn0KCnRlbXBsYXRlPHR5cGVuYW1lIFQ+ClQgU3RhY2s8VD46OlBvcCgpCnsKICAgIFQgdmFsdWUgPSB0b3AtPnZhbHVlOwogICAgVW5pdCAqdG1wID0gdG9wLT5wcmV2OwogICAgZGVsZXRlIHRvcDsKICAgIHRvcCA9IHRtcDsKICAgIGNvdW50LS07CiAgICByZXR1cm4gdmFsdWU7Cn0KCnRlbXBsYXRlPHR5cGVuYW1lIFQ+ClN0YWNrPFQ+Ojp+U3RhY2soKQp7CiAgICBVbml0ICpjdXJyID0gdG9wOwogICAgaWYgKCFjdXJyKQogICAgewogICAgICAgIHJldHVybjsKICAgIH0KICAgIHdoaWxlIChjdXJyKQogICAgewogICAgICAgIFVuaXQqIHRtcCA9IGN1cnItPnByZXY7CiAgICAgICAgZGVsZXRlIGN1cnI7CiAgICAgICAgY3VyciA9IHRtcDsKICAgIH0KfQoKCmludCBtYWluKCkgewoJLy8geW91ciBjb2RlIGdvZXMgaGVyZQoJCglTdGFjazxpbnQ+IG15U3RhY2s7CgkKCQoJcmV0dXJuIDA7Cn0=