栈的链式存储

c/c++

浏览数:225

2019-6-29

如图,和线性表的链式存储十分类似

#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);
}

如图

 

作者:一盏淡酒、醉了夕阳