如图,和线性表的链式存储十分类似
#include<stdio.h>
#include<malloc.h>
typedef struct node{
int data;
struct node *next;
}StackNode,*LinkStack;
LinkStack Init_Stack()
{
LinkStack ls=NULL;
return ls;
}
int Empty_LinkStack(LinkStack p)
{
if(p==NULL)
return 0;
else
return 1;
}
void push(LinkStack *ls,int *x)
{
LinkStack p=(LinkStack)malloc(sizeof(StackNode));
p->data=*x;
p->next=*ls;
*ls=p;
}
int pop(LinkStack *ls,int *y)
{
LinkStack p;
if(Empty_LinkStack(*ls))
{
p=*ls;
*y=p->data;
*ls=(*ls)->next;
p->next=NULL;
free(p);
return *y;
}
else
return 0;
}
void print(LinkStack ls)
{
LinkStack p=ls;
printf("输出栈中的元素:\n");
while(p!=NULL)
{
printf("%d ",p->data);
p=p->next;
}
printf("\n");
}
void main()
{
LinkStack ls=Init_Stack();
int n,i,x,y;
printf("请输入可能要入栈的个数:");
scanf("%d",&n);
printf("请输入一组要入栈的数据:\n");
for(i=0;i<n;i++)
{
scanf("%d",&x);
push(&ls,&x);
}
print(ls);
printf("弹出栈顶的元素是:%d\n",pop(&ls,&y));
print(ls);
}
如图