数据结构学习笔记-栈

基本特性

后进者先出, 先进者后出, 这就是典型的栈结构
栈是一种操作受限的线性表, 只允许在一端插入和删除数据
栈是一种特定的数据结构,是对特定场景的抽象
当某个数据集合只涉及在一端插入和删除数据, 并且满足后进先出, 先进后出的特性, 我们就应该首选栈这种数据结构

实现一个栈

栈主要包含两个操作, 入栈和出栈
用数组实现的栈叫顺序栈
用链表实现的栈叫链式栈 (todo)
两种实现的空间复杂度和时间复杂度都为O(1)

栈的应用

  1. 函数调用栈
    操作系统给每个线程分配了一块独立的内存空间,这块内存被组织成“栈”这种结构, 用来存储函数调用时的临时变量。每进入一个函数,就会将临时变量作为一个栈帧入栈,当被调用函数执行完成,返回之后,将这个函数对应的栈帧出栈
  2. 表达式求值
    一个保存操作数的栈,一个保存运算符的栈。从左向右遍历表达式,当遇到数字,就直接压入操作数栈;当遇到运算符,就与运算符栈的栈顶元素进行比较
    如果比运算符栈顶元素的优先级高,就将当前运算符压入栈;如果比运算符栈顶元素的优先级低或者相同,从运算符栈中取栈顶运算符,从操作数栈的栈顶取两个操作数,然后进行计算,再把计算完的结果压入操作数栈
  3. 检测括号匹配
    扫描到左括号入栈, 扫描到右括号从栈顶取一个元素匹配
  4. 浏览器前进后退功能
    两个栈实现, 首次浏览页面压入后退栈, 点击后退按钮将后退栈元素出栈压入前进栈
打赏
  • 版权声明: 本博客所有文章除特别声明外,均采用 Apache License 2.0 许可协议。转载请注明出处!
  • © 2017-2023 王丹鹏
  • Powered by Hexo Theme Ayer
  • 冀ICP备15029707号

请我喝杯咖啡吧~

支付宝
微信