【数据结构】栈的实现详解(c语言)

目录

一.栈的基本概念

二.栈的基本结构

​编辑

三.栈的实现


一.栈的基本概念

栈:一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端
称为栈顶,另一端称为栈底。栈中的数据元素遵守后进先出LIFO(Last In First Out)的原则。
进栈(压栈):栈的插入操作叫做进栈/压栈/入栈,入数据在栈顶。
出栈(弹栈):栈的删除操作叫做出栈。出数据也在栈顶

二.栈的基本结构

 当插入一个数据的时候,插入成功那么该数据此时就是栈顶元素了

而最先入栈的元素就是栈底元素。

最先入栈的元素被压在栈底,当需要取出元素的时候当然只能先把栈底以上的元素取出后,才能够将栈底的元素取出

三.栈的实现

栈的实现分为两种方式,1.数组实现2.链表实现

这两种实现都有着优缺点吧,但相对而言我觉得数组的实现更优一些,用链表实现每次入栈都需要申请空间和出栈时都需要释放空间,而数组只需要在容量满了的时候扩容,最主要的是数组的物理结构连续的,当计算缓存的时候命中率更高,读取效率也越高。

链表的实现又分为两种方法,一是入栈时尾插,出栈时尾删。二是入栈时头插出栈时头删

相对而言,第二种方法更优一些,因为尾插尾删每次都需要找尾,时间复杂度为O(n),而头删头插不需要找尾,时间复杂度为O(1)

ok,链表实现栈就不再阐述了,今天讲的主要内容为用数组实现栈

数组实现栈,当入栈的时候就像当于我们之前实现顺序表时的尾插出栈的时候就相当于顺序表的尾删,此时它们的时间复杂度为O(1)

由下面的图可以看到栈底的元素一直为第一个进去的元素,当入栈一个元素的时候,此时栈顶就变为了该元素所在的位置,当出栈一个元素的时候,栈顶就为出的这个元素的前面一个元素了

总结而言栈顶元素实际上就是数组的最后一个元素

 数组实现栈用文字已经讲得差不多了,现在让我们开始用代码来实现它吧

1.相关的接口函数

2.定义一个结构体

 3.初始化

初始化top==0,此时top表示栈的元素个数,也表示栈顶元素的下一个位置,即【top-1】表示栈顶元素

 4.入栈

入栈时需判断栈是否满了,满了就扩容

 5.判断栈是否为空

当top为零时表示栈为空

 6.出栈

下图获取栈顶元素需断言一下,防止栈为空时,访问data【-1】位置(非法访问)

 

 声明一下出栈是和获取栈顶元素配套使用的,如下图:

 此时获取了栈顶元素然后让它出栈

7.获取栈的元素个数

 

 8.栈的销毁

关于栈的知识分享就到这了,觉得有所帮助就点点赞吧,感谢大家的支持,

有什么需要改进的地方希望大家可以指出来

886!

  • 11
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 9
    评论
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

冧轩在努力

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值