数据结构之链式栈

前言

链式栈是一种将链表和栈结合的数据结构,他有着栈的优点,也同时有着链表大小没有限制的优点,它里面的数据是由一个个节点所构成的

链式栈的数据结构

它是由是一个链表和一个栈组成,如图所示
在这里插入图片描述

typedef struct link_
{
	int data;
	struct link_ *next;
}link;

typedef struct lstack_
{
	link *head;
	int top;
}lstack;

链式栈的创建

lstack * lstack_create ()
{
	lstack *s =(lstack *) malloc (sizeof (lstack)); //堆空间申请
	if (wall (s)==-1)
		return NULL;
	s ->head =NULL;
	s ->top =0; 
	return s;
}

链式栈的入栈

int lstack_push (lstack *s,int va)
{
	if (wall (s)==-1)
		return -1;
	lstack *p =s;
	if (wall (p) ==-1)
		return -1;
	link *new =(link *) malloc (sizeof (link)); //创建一个新节点
	if (new ==NULL)
	{
		puts ("new NULL []");
		return -1;
	}
	new ->data = va; //数值初始化
	new ->next =p->head; //将新节点指向一开始的节点
	p ->head=new; 将老节点的指针给新节点
	s ->top++;
	return 0;
}

链式栈的出栈

int lstack_pop (lstack *s,int *va)
{
	if (wall (s)==-1)
		return -1;
	link *p =s ->head;
	if (wall2 (p) ==-1)
		return -1;
	*va =p ->data;
	s ->head = p->next; 指针向前移动
	free (p); //释放第一个空间
	p =NULL;  //指针指空
	s->top --;
	return 0;
}

链式栈的查看

int lstack_show (lstack *s,int *va)
{	
	if (wall (s)==-1)
		return -1;
	lstack *p =s ;
	if (wall (s) ==-1)
		return -1;
	*va=p ->head->data;
}

链式栈的释放

void lsatck_free (lstack *s)
{
	int a=0;
	while (s ->top !=0)
	{
		lstack_pop (s,&a); //出栈将栈出空
	}
	free (s); //释放栈
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值