1 template<typename T>
2 struct Node
3 {
4 T data;
5 Node<T>* next;
6 };
7
8 template<typename T>
9 class stack
10 {
11 Node<T>* top;
12 public:
13 stack():top(NULL){}
14 void push(T n);
15 T pop();
16 bool stackEmpty();
17 T getTop();
18 ~stack(){}
19 void print();
20 };
21
22 template<typename T>
23 void stack<T>::push(T n)
24 {
25 Node<T>* r=new Node<T>;
26 r->data=n;
27 r->next=top;
28 top=r;
29 }
30
31 template<typename T>
32 T stack<T>::pop()
33 {
34 Node<T> *ptr = top;
35 top = top->next;
36 T t=ptr->data;
37 delete ptr;
38 return t;
39 }
40
41
42 template<typename T>
43 void stack<T>::print()
44 {
45 for(Node<T>* p=top;p;p=p->next)
46 cout<<p->data<<" ";
47 }
48
49 template<typename T>
50 T stack<T>::getTop()
51 {
52 return top->data;
53 }
54
55 template<typename T>
56 bool stack<T>::stackEmpty()
57 {
58 if(top)return false;
59 else return true;
60 }