dribble.gif Помогите! Не могу найти ошибку
Что-то с добавлением элементов,т.к. при выводе выводится только последний(повторяется взависимости от кол-ва введенных эл-тов)
Вот код

#include <iostream>
#include <conio.h>
using namespace std;
struct stack
{
int *dat;
stack *prev;
}*top;
stack *push (stack *to,int *data)
{
stack *uk=new stack;
uk->prev = to;
uk->dat = data;
return uk;
};
stack *pop(stack *to)
{int *inf;

inf=to->dat;
cout<<*inf;
stack *uk=to;
to = to->prev;
delete uk;
return to;
};
void *print(stack *to)
{
int *d;
stack *uk=to;
while (uk!=NULL)
{
d=uk->dat;
uk=uk->prev;
cout<<*d<<endl;
}
return d;
};

int main ()
{
int k;
int a;
int q;
top=NULL;
t:cout<<"Vvedite: 1-add;2-del;3-print"<<endl;cin>>k;
switch(k)
{
case 1:{
cout<<"Vvedite element"<<endl;
cin>>a;
top=push(top,&a);};break;
case 2:if (top==NULL) {cout<<"Stek pust"<<endl;getch();break;}
else top=pop(top);break;
case 3:if (top==NULL) {cout<<"Stek pust"<<endl;getch();break;} else print(top);
break;
}
cout<<"Prodolgim"<<endl;cin>>q;
if (q==2) goto t;
return 0;
}