链式栈实现代码如下
#include<stdio.h>
#include<malloc.h>
#define ElemType int
typedef struct SNode{
ElemType data;
struct SNode * next;
}SNode,* PSNode;
typedef struct LinkStack{
PSNode top;
int count;
}LinkStack;
bool Push(LinkStack * S,ElemType x);
void Traverse(LinkStack * S);
bool Pop(LinkStack * S, ElemType & x);
int main(void)
{
ElemType x;
LinkStack S;
S.top = NULL;
Push(&S , 1);
Push(&S , 1);
Push(&S , 2);
Push(&S , 3);
Push(&S , 3);
Push(&S , 2019);
Traverse(&S);
if(Pop(&S , x))
{
printf("Pop succeed!\n");
printf("The data popped out is %d!\n",x);
}
Traverse(&S);
printf("============Ending==============\n");
return 0;
}
bool Push(LinkStack * S,ElemType x)
{
PSNode p = (PSNode)malloc(sizeof(SNode));
p->data = x;
p->next = S->top;
S->top = p;
S->count++;
return true;
}
bool Pop(LinkStack * S, ElemType & x)
{
if(S->top == NULL)
return false;
x = S->top->data;
PSNode p = S->top;
S->top = S->top->next;
free(p);
S->count--;
return true;
}
void Traverse(LinkStack * S)
{
PSNode p = S->top;
while(p->next)
{
printf("%d\t",p->data);
p = p->next;
}
printf("\n");
}