#include<iostream>
using namespace std;
struct Node{
int data;
Node *next;
Node (int d){
data = d;
next = NULL;
}
};
struct stack{
Node *top = NULL;
int cnt = 0;
void push(int d);
void pop();
int Size();
bool Empty();
int Top();
};
void stack::push(int d){
Node *newNode = new Node(d);
if(top == NULL){
top = newNode;
}
else{
newNode->next = top;
top = newNode;
}
cnt++;
}
void stack:: pop(){
if(top == NULL){
cout<<"stack is empty. Underflow....\n";
}
else{
Node *del = top;
top = top->next;
delete del;
cnt--;
}
}
int stack:: Size(){
return cnt;
}
bool stack:: Empty(){
if(Size()== 0){
return 1;
}
return 0;
}
int stack:: Top(){
if(top == NULL){
cout<< "stack is empty.\n";
return -1;
}
return top->data;
}
int main(){
stack st;
st.push(10);
st.push(20);
st.push(30);
st.push(40);
st.push(50);
cout<<"Top value: "<<st.Top()<<endl;
while(st.Empty() != 1){
cout<< st.Top() <<endl;
st.pop();
}
return 0;
}
I2luY2x1ZGU8aW9zdHJlYW0+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgpzdHJ1Y3QgTm9kZXsKICAgIGludCBkYXRhOwogICAgTm9kZSAqbmV4dDsKCiAgICBOb2RlIChpbnQgZCl7CiAgICAgICAgZGF0YSA9IGQ7CiAgICAgICAgbmV4dCA9IE5VTEw7CiAgICB9Cn07CgpzdHJ1Y3Qgc3RhY2t7CiAgICBOb2RlICp0b3AgPSBOVUxMOwogICAgaW50IGNudCA9IDA7CgogICAgdm9pZCBwdXNoKGludCBkKTsKICAgIHZvaWQgcG9wKCk7CiAgICBpbnQgU2l6ZSgpOwogICAgYm9vbCBFbXB0eSgpOwogICAgaW50IFRvcCgpOwp9OwoKdm9pZCBzdGFjazo6cHVzaChpbnQgZCl7CiAgICBOb2RlICpuZXdOb2RlID0gbmV3IE5vZGUoZCk7CiAgICBpZih0b3AgPT0gTlVMTCl7ICAgICAgICAgICAgICAgCiAgICAgICAgdG9wID0gbmV3Tm9kZTsKICAgIH0KICAgIGVsc2V7CiAgICAgICAgbmV3Tm9kZS0+bmV4dCA9IHRvcDsKICAgICAgICB0b3AgPSBuZXdOb2RlOwogICAgfQogICAgY250Kys7Cn0KCnZvaWQgc3RhY2s6OiBwb3AoKXsKICAgIGlmKHRvcCA9PSBOVUxMKXsKICAgICAgICBjb3V0PDwic3RhY2sgaXMgZW1wdHkuIFVuZGVyZmxvdy4uLi5cbiI7CiAgICB9CiAgICBlbHNlewogICAgICAgIE5vZGUgKmRlbCA9IHRvcDsKICAgICAgICB0b3AgPSB0b3AtPm5leHQ7CiAgICAgICAgZGVsZXRlIGRlbDsKICAgICAgICBjbnQtLTsKICAgIH0KfQoKaW50IHN0YWNrOjogU2l6ZSgpewogICAgcmV0dXJuIGNudDsKfQoKYm9vbCBzdGFjazo6IEVtcHR5KCl7CiAgICBpZihTaXplKCk9PSAwKXsKICAgICAgICByZXR1cm4gMTsKICAgIH0KICAgIHJldHVybiAwOwp9CgppbnQgc3RhY2s6OiBUb3AoKXsKICAgIGlmKHRvcCA9PSBOVUxMKXsKICAgICAgICBjb3V0PDwgInN0YWNrIGlzIGVtcHR5LlxuIjsKICAgICAgICByZXR1cm4gLTE7CiAgICB9CiAgICByZXR1cm4gdG9wLT5kYXRhOwp9CgppbnQgbWFpbigpewogICAgc3RhY2sgc3Q7CgogICAgc3QucHVzaCgxMCk7CiAgICBzdC5wdXNoKDIwKTsKICAgIHN0LnB1c2goMzApOwogICAgc3QucHVzaCg0MCk7CiAgICBzdC5wdXNoKDUwKTsKCiAgICBjb3V0PDwiVG9wIHZhbHVlOiAiPDxzdC5Ub3AoKTw8ZW5kbDsKCiAgIHdoaWxlKHN0LkVtcHR5KCkgIT0gMSl7CiAgICAgICAgY291dDw8IHN0LlRvcCgpIDw8ZW5kbDsKICAgICAgICBzdC5wb3AoKTsKICAgfQoKICAgcmV0dXJuIDA7Cn0=