数据结构与算法总结--栈

栈的定义

栈是一种操作受限的线性表,只允许在一端进行插入和删除操作。

栈的特点

先进后出

为什么需要栈

虽然数组和链表更加灵活,并且都可以满足只在一端进行插入和删除操作的需求,但是由于会暴露其他操作,存在引发错误操作的风险,所以,当某个数据集合只涉及在一端进行插入和删除数据,并且满足先进后出的操作特性时,应首先使用栈这种数据结构。

如何实现一个栈

栈既可以用数组来实现,也可以用链表来实现
用数组实现的栈,叫顺序栈;用链表实现的栈,叫链式栈

基本操作的性能

入栈时间复杂度O(1), 空间复杂度O(1)
出栈时间复杂度O(1), 空间复杂度O(1)

栈的应用场景

  • 函数调用

为什么函数调用要用栈来保存临时变量?
函数调用符合后进先出的特性,用栈来实现最为合适。从调用函数进入被调用函数,变化的是作用域,从根本上讲,只要保证每进入一个新函数,都是一个新的作用域就可以,而实现这个,用栈最合适。进入被调用函数,分配一段栈空间给这个函数的变量,在这个函数结束的时候,将栈顶复位,正好回到调用函数的作用域。

  • 表达式求值(一个栈用于保存操作数,一个栈用于保存运算符)
  • 括号匹配
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值