#include <iostream>
class IntNode
{
public:
IntNode() {}
IntNode(int data, IntNode* link) : _data(data), _link(link) {}
IntNode* getLink() const { return _link; }
int getData () const { return _data; }
void setData(int & data) { _data = data; }
void setLink(IntNode * link) { _link = link; }
void addNode(int data)
{
setLink(new IntNode(data, NULL) );
}
void insert(IntNode* link, int & data) { link->setLink( new IntNode(data, link->getLink()) ); }
IntNode* search(IntNode* head, int target)
{
IntNode* temp = head;
if(temp == NULL)
return NULL;
else
{
while(temp->getData() != target && temp->getLink() != NULL)
temp = temp->getLink();
if(temp->getData() == target)
return temp;
else
return NULL;
}
}
private:
int _data;
IntNode* _link;
};
class Stack
{
public:
Stack(){ head = new IntNode(0,NULL);}
void push(const int & X)
{
head->addNode(X);
}
int top ()
{
IntNode* t = head->getLink();
return t->getData();
}
void pop()
{
if( head->getLink() != NULL)
{
IntNode* t = head->getLink();
head->setLink(t->getLink());
delete t;
}
}
bool isEmpty(){ if(head->getLink() == NULL) return true; return false; }
private:
IntNode* head;
};
int main()
{
Stack* st = new Stack;
st->push(5);
st->push(6);
st->push(7);
st->push(8);
for(int i = 0; i <= 3; i++)
{
std::cout << st->top() << " ";
// st->pop();
}
st->pop();
std::cout << st->top();
/* for(int i = 0; i <= 5; i++)
{
std::cout << st->top() << " ";
st->pop();
}*/
delete st;
return 0;
}