#include <iostream>
#include <cmath>
using namespace std;
class Stack
{
private:
int* arr;
int cap;
int topIdx;
public:
Stack(int c = 100);
~Stack();
void push(int value);
void pop();
int top();
bool isEmpty();
int size();
};
Stack::Stack(int c) : cap(c), topIdx(-1)
{
arr = new int[cap];
}
Stack::~Stack()
{
if (arr)
{
delete[] arr;
arr = nullptr;
}
}
void Stack::push(int value)
{
if (topIdx + 1 == cap)
{
cout << "Stack is overflow\n";
return;
}
arr[++topIdx] = value;
}
void Stack::pop()
{
if (!isEmpty())
{
topIdx--;
}
else
{
cout << "Stack is empty\n";
}
}
int Stack::top()
{
if (!isEmpty())
{
return arr[topIdx];
}
else
{
cout << "Stack is empty\n";
return -1;
}
}
bool Stack::isEmpty()
{
return topIdx == -1;
}
int Stack::size()
{
return topIdx + 1;
}
int main() {
Stack s;
s.push(10);
s.push(20);
s.push(30);
cout << "Top element: " << s.top() << "\n";
s.pop();
cout << "Top element after pop: " << s.top() << "\n";
cout << "Stack size: " << s.size() << "\n";
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8Y21hdGg+Cgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKY2xhc3MgU3RhY2sKewpwcml2YXRlOgoJaW50KiBhcnI7CglpbnQgY2FwOwoJaW50IHRvcElkeDsKcHVibGljOgoJU3RhY2soaW50IGMgPSAxMDApOwoJflN0YWNrKCk7Cgl2b2lkIHB1c2goaW50IHZhbHVlKTsKCXZvaWQgcG9wKCk7CglpbnQgdG9wKCk7Cglib29sIGlzRW1wdHkoKTsKCWludCBzaXplKCk7Cn07CgpTdGFjazo6U3RhY2soaW50IGMpIDogY2FwKGMpLCB0b3BJZHgoLTEpCnsKCWFyciA9IG5ldyBpbnRbY2FwXTsKfQoKU3RhY2s6On5TdGFjaygpCnsKCWlmIChhcnIpCgl7CgkJZGVsZXRlW10gYXJyOwoJCWFyciA9IG51bGxwdHI7Cgl9Cn0KCnZvaWQgU3RhY2s6OnB1c2goaW50IHZhbHVlKQp7CglpZiAodG9wSWR4ICsgMSA9PSBjYXApCgl7CgkJY291dCA8PCAiU3RhY2sgaXMgb3ZlcmZsb3dcbiI7CgkJcmV0dXJuOwoJfQoKCWFyclsrK3RvcElkeF0gPSB2YWx1ZTsKfQoKdm9pZCBTdGFjazo6cG9wKCkKewoJaWYgKCFpc0VtcHR5KCkpCgl7CgkJdG9wSWR4LS07Cgl9CgllbHNlCgl7CgkJY291dCA8PCAiU3RhY2sgaXMgZW1wdHlcbiI7Cgl9Cn0KCmludCBTdGFjazo6dG9wKCkKewoJaWYgKCFpc0VtcHR5KCkpCgl7CgkJcmV0dXJuIGFyclt0b3BJZHhdOwoJfQoJZWxzZQoJewoJCWNvdXQgPDwgIlN0YWNrIGlzIGVtcHR5XG4iOwoJCXJldHVybiAtMTsKCX0KfQoKYm9vbCBTdGFjazo6aXNFbXB0eSgpCnsKCXJldHVybiB0b3BJZHggPT0gLTE7Cn0KCmludCBTdGFjazo6c2l6ZSgpCnsKCXJldHVybiB0b3BJZHggKyAxOwp9CgppbnQgbWFpbigpIHsKCVN0YWNrIHM7CglzLnB1c2goMTApOwoJcy5wdXNoKDIwKTsKCXMucHVzaCgzMCk7CgoJY291dCA8PCAiVG9wIGVsZW1lbnQ6ICIgPDwgcy50b3AoKSA8PCAiXG4iOwoJcy5wb3AoKTsKCWNvdXQgPDwgIlRvcCBlbGVtZW50IGFmdGVyIHBvcDogIiA8PCBzLnRvcCgpIDw8ICJcbiI7Cgljb3V0IDw8ICJTdGFjayBzaXplOiAiIDw8IHMuc2l6ZSgpIDw8ICJcbiI7CgoJcmV0dXJuIDA7Cn0K