首页
找靠谱产品
找解决方案
找靠谱公司
找案例
找对的人
专家智库
悬赏任务
SAAS
ToB门户
了解全球最新的ToB事件
论坛
潜水/灌水快乐,沉淀知识,认识更多同行。
ToB圈子
加入IT圈,遇到更多同好之人。
微博
Follow
记录
Doing
博客
Blog
文库
业界最专业的IT文库,上传资料也可以赚钱
下载
分享
Share
排行榜
Ranklist
相册
Album
应用中心
qidao123.com ToB IT社区-企服评测·应用市场
»
论坛
›
数据库
›
分布式数据库
›
【数据结构】——栈
返回列表
发新帖
【数据结构】——栈
[复制链接]
发表于 2025-9-15 06:03:25
|
显示全部楼层
|
阅读模式
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要
登录
才可以下载或查看,没有账号?
立即注册
×
一、栈的概念和结构
栈实在就是一种特殊的次序表,其只允许在一端进出,就是栈的数据的插入和删除只能在一端举行,举行数据的插入和删除操纵的一端称为栈顶,另一端称为栈底。栈中的元素遵照先辈后出LIFO(Last InFirst Out)的原则。
压栈:
栈的插入操纵叫做进栈/压栈/入栈,入栈的位置也是在栈顶。
出栈:
栈的删除操纵叫做出栈。出栈也是在栈顶。
那么我们的栈是要怎样举行实现呢?
我们实现栈的话有两种:链表和数组。
假如是利用链表的话,那么我们要是以头为栈顶,那么我们举行头插的话,就须要先思量链表是否为空的情况,然后我们的头插的结构也是比力贫苦,每次都须要举行节点的申请。
还有就是举行出栈的时间也比力贫苦。
假如我们利用数组,直接利用数组的尾部为栈顶,那么我们的压栈和出栈都可以直接举行,时间复杂度为O(1)。
不外链表和数组都是可以实现的,不外假如利用链表举行实现的话,我们就保举利用链表的头为栈顶,然后数组的话我们发起利用数组的尾部为栈顶。如允许以使得压栈和出栈的时间复杂度都为O(1)。
二、栈的实现
1、栈的界说
我们上面提到了,我们实现栈,我们底层利用数组来实现,那么其界说和我们前面学习的次序表基本是一样的,但是就是我们的栈是有一个限制的,就是其只能在一端举行收支。
栈的界说如下:
实在 arr就是我们
存储
数据的数组,然后top表现当前我们的栈有多少个元素,capacity就表现我们当前的栈最大的容量。
我们界说好后,那么我们对这个栈举行一个初始化:
因为栈的烧毁这里也不做多的解释了。
栈的烧毁:
下面我们实现栈的压栈:
我们栈的特点就是其只有一端可以举行压栈和出栈的操纵,我们前面说到,我们利用数组来实现的话,那么我们是在数组的尾部举行压栈和出栈,那么我们该怎样举行压栈呢?
我们在界说栈的时间,我们有一个成员top其是记载当前我们的栈中的有用成员个数的,那么我们的数组是可以通过下标举行插入数据的,不外要留意的是,我们的栈假如此时为空,而且其表现栈的容量的成员也是空的时间,那么我们就须要举行空间申请的,还有就是栈假如满了,那么我们此时也须要举行空间的申请。不外我们发现我们的栈为空和栈满的时间有个共同点,就是我们的top和capacity是i相称的。所以我们再入栈操纵的时间,一开始须要先举行判断当前栈的空间是否足够,不敷的话我们要举行扩容,然后我们扩容一样平常是二倍增容。还有一个特殊情况就是刚开始的时间,我们的容量照旧0,那么我们此时举行二倍增容是行不通的,所以我们也特殊处理惩罚一下。
代码
如下:
上面我们实现了压栈,那么我们接下来就实现栈的别的一个
功能
:出栈
我们要出栈,那么我们的栈就要不为空才行,所以我们可以先写一个函数判断栈是否为空,然后通过这个函数我们就可以举行出栈,要留意的是我们的栈,出栈也是要在栈顶这一端,所以也是在数组的末了端,那么我们的top举行--操纵就可以了,那么就可以使得我们的栈的有用元素个数减-,而且是栈顶的第一个元素。
压栈:
我们栈偶然候只是须要取栈顶的元素,并不须要出栈,那么我们也可以写一个函数来实现,我们的取栈顶元素是很简朴的,就是访问数组一样,我们就访问下标为top-1的元素即可。
然后我们也可以获取当前栈的实际有用元素个数:
可以看到我们的栈的两个大的
功能
照旧很好实现的,和我们前面的次序表大抵一样,就是其要控制的是,其入栈和出栈的端要一致。
回复
使用道具
举报
返回列表
浏览过的版块
SQL-Server
Oracle
.Net
数据仓库与分析
tsx81428
+ 我要发帖
登录后关闭弹窗
登录参与点评抽奖 加入IT实名职场社区
去登录
微信订阅号
微信服务号
微信客服(加群)
H5
小程序
快速回复
返回顶部
返回列表