#include<iostream.h>
typedef struct stacknode{
int data;
struct stacknode *next;
}StackNode;
typedef struct{
StackNode *top; //栈顶指针
}LinkStack;
void InitStack(LinkStack *&S){
/*if(!S)
{
S=new LinkStack;
}*/
S=new LinkStack;
S->top=NULL;
}
int StackEmpty(LinkStack *&S){
return S->top==NULL;
}
void Push(LinkStack *&S,int e){//将元素e插入链栈头部
StackNode *p;
p=new StackNode;
p->data=e;
p->next=S->top;//将新结点*p插入链栈头部
S->top=p;
}
int Pop(LinkStack *&S){
int e;
StackNode *p=S->top;//保存栈顶指针
if(StackEmpty(S)) return 0; //下溢
e=p->data; //保存栈顶结点数据
S->top=p->next; //将栈顶结点从链上摘下
delete(p);
return e;
}
int StackTop(LinkStack *&S){//取栈顶元素
if(StackEmpty(S)) return 0;
return S->top->data;
}
void print(LinkStack *&S){
StackNode *p=S->top;
while(p){
cout<<p->data<<' ';
p=p->next;
}
cout<<endl;
}
void main()
{
int e=10;
LinkStack *S;
InitStack(S);
for(int i=0;i<5;i++)
{
cin>>e;
Push(S,e);
}
print(S);
Pop(S);
cout<<StackTop(S);
}