#include<stdio.h>
#include<stdlib.h>
#define OK 1
#define ERROR 0
#define OVERFLOW -2
typedef int Status;
typedef struct StackNode
{
int data;
struct StackNode *next;
}StackNode,*LinkStack;
Status InitStack(LinkStack *s)
{
*s=NULL;
return OK;
}
void Push(LinkStack *s,int e)
{
StackNode *p;
p=(StackNode *)malloc(sizeof(StackNode));
if(!p)
exit(OVERFLOW);
p->data=e;
p->next=*s;
*s=p;
}
int GetTop(LinkStack s)
{
if(!s)
exit(OVERFLOW);
return s->data;
}
Status Pop(LinkStack *s,int *e)
{
StackNode *p;
if(!*s)
return ERROR;
*e=(*s)->data;
p=*s;
*s=(*s)->next;
free(p);
return OK;
}
void main()
{
LinkStack s;
int a,b,c,i,d;
if(InitStack(&s))
printf("已初始化链栈\n\n");
printf("输入元素个数:");
scanf("%d",&a);
printf("输入元素:\n");
for(i=0;i<a;i++)
{
scanf("%d",&b);
Push(&s,b);
}
printf("取链栈栈顶:%d\n\n",GetTop(s));
printf("出栈\n");
for(i=0;i<a;i++)
{
if(!Pop(&s,&c))
printf("栈空\n\n");
else
printf("%d ",c);
}
printf("\n\n");
}