#include<iostream>
using namespace std;
class Point{
int x;
Point *next;
public:
Point();
int getx();
bool setx(int x);
Point *getnext();
bool setnext(Point *p);
};
Point::Point(){
next = NULL;
}
int Point::getx(){
return this->x;
}
bool Point::setx(int x){
this->x = x;
}
Point *Point::getnext(){
return this->next;
}
bool Point::setnext(Point *p){
this->next = p;
}
class Stack{
Point *tail;
int length;
public:
Stack();
int top();
bool push(int x);
bool pop();
bool emp();
int size();
};
Stack::Stack(){
length = 0;
tail = new Point();
tail->setnext(NULL);
}
int Stack::top(){
return this->tail->getnext()->getx();
}
bool Stack::push(int x){
Point *q = new Point();
q->setnext(tail);
tail = q;
q->getnext()->setx(x);
length++;
return 1;
}
bool Stack::pop(){
if(length == 0)
return 0;
Point *q = new Point();
q = tail;
tail = q->getnext();
length--;
delete(q);
}
bool Stack::emp(){
if(length == 0)
return 0;
else
return 1;
}
int Stack::size(){
return length;
}
main(){
Stack s = Stack();
s.push(1);
cout<<s.top()<<endl;
s.push(2);
cout<<s.top()<<endl;
s.push(3);
cout<<s.top()<<endl;
s.push(4);
cout<<s.top()<<endl;
s.push(5);
cout<<s.top()<<endl;
for (int i=0; i<5; i++){
cout<<s.top()<<endl;
s.pop();
}
}