【C语言之数据结构(链栈】

C语言之数据结构(链栈)



一、栈的链式存储结构

栈的链式存储结构,简称为链栈。

二、链栈的简单说明

栈只是栈顶来做插入和删除操作,栈顶放在链表的头部还是尾部呢?
由于单链表有头指针,而栈顶指针也是必须的,那么为啥不让它俩合二为一呢,所以比较好的办法就是把栈顶放在单链表的头部。另外,都有栈顶在头部了,单链表中比较常用的头结点就失去了意义,通常对于链栈来说,是不需要都结点的。
在这里插入图片描述
特点:对于链表来说,基本不存在栈满的情况,除非内存已经没有可以使用的空间了。

三、链栈的代码

1.链栈的结构体代码如下:

代码如下(示例):

typedef struct StackNode
{
	SElemType data;结点数据域
	struct StackNode *next;结点指针域
}StackNode,*LinkStackPtr;

typedef struct LinkStack
{
	LinkStackPtr top;栈顶指针
	int count;链表长度
}LinkStack;

2.进栈操作

对于链栈的进栈操作,假设元素值为e的新结点是s,top为栈顶指针
在这里插入图片描述

代码如下(示例):

Status Push(LinkStack *L,Selemtype e)
{
	LinkStackPtr s=(LinkStackPtr )malloc(sizeof(StackNode));新结点
	s->data=e;
	s->next=L->top;新结点指向top指针所指地址
	L->top=s;top指针指向新结点
	L->count++;
	return OK;
}

2.出栈操作

出栈操作,假设变量p用来储存要删除的栈顶结点,将栈顶指针下移一位,最后释放p即可;
在这里插入图片描述

若栈不空,则删除L的栈顶元素,用e返回其值,并返回OK,否则返回ERROR;
Status Pop(LinkStack *L,Selemtype *e)
{
	LinkStackPtr p;新建结点p
	if(StackEmpty(L))
	return ERROR;
	*e=L->top->data;
	p=L->top;将栈顶赋值给p
	L->top=L->top->next;将指针下移,指向下一个结点
	free(p);释放p
	L->count--;
	return OK;
	
}

总结

提示:这里对文章进行总结:

例如:以上就是今天要讲的内容,本文仅仅简单介绍了pandas的使用,而pandas提供了大量能使我们快速便捷地处理数据的函数和方法。

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值