数据结构之“栈”

  • 栈是什么
  • 栈的应用场景
    • 场景一:十进制转二进制
    • 场景二:有效的括号
    • 场景三:函数调用堆栈
    • JS中的函数调用堆栈
    • LeetCode:20.有效的括号
    • LeetCode:144.二叉树的前序遍历
  • 技术要点
  • 思考题

栈是什么

一个后进先出的数据结构
JavaScript中没有栈,但可以用Array实现栈的所有功能

const stack = [];
stack.push(1);
stack.push(2);
const item1 = stack.pop();
const item2 = stack.pop();

栈的应用场景

需要后进先出的场景
比如:十进制转二进制、判断字符串的括号是否有效、函数调用堆栈…

场景一:十进制转二进制

后出来的余数反而要排到前面
把余数依次入栈,然后再出栈,就可以实现余数倒序输出

场景二:有效的括号

越靠后的左括号,对应的右括号越靠前
左括号入栈,右括号出栈,最后栈空了就是合法的

场景三:函数调用堆栈

最后调用的函数,最先执行完
JS解释器使用栈来控制函数的调用顺序

JS中的函数调用堆栈

const func1 = () => {func2();
};
const func2 = () => {func3();
};
const func3 = () => {};func1();

LeetCode:20.有效的括号

解题思路
对于没有闭合的左括号而言,越靠后的左括号,对应的右括号越靠前
满足后进先出,考虑用栈
输入:"{[]}" 输出:true

解题步骤
新建一个栈
扫描字符串,遇左括号入栈,遇到和栈顶括号类型匹配的右括号就出栈,类型不匹配直接判定为不合法
最后栈空了就合法,否则不合法


时间和空间复杂度都为O(n)

LeetCode:144.二叉树的前序遍历



时间复杂度O(n)空间复杂度O(n)
通过这个例子可以知道栈的作用可以模拟递归、改写递归

技术要点

栈是一个后进先出的数据结构
JavaScript中没有栈,但可以用Array实现栈的所有功能
栈常用操作:push、pop、stack[stack.length-1]

思考题

1、请用 ES6 的 class,封装一个 Stack 类,包括 push、pop、peek 方法。
2、请用栈这个数据结构,将100这个十进制数字转为二进制。

(三)数据结构之“栈”相关推荐

  1. 【数据结构总结】第三章:栈和队列(线性结构)

    第三章:栈和队列(线性结构) 提示:本文主要是以思维导图的形式概括数据结构第一章的精华内容,基本不会用到文字性的内容,目的是为了给大家梳理每个重要的知识点的相关概念,方便大家在复盘的时候快速阅读和浏览 ...

  2. c++数据结构队列栈尸体_数据结构-第三章:栈和队列(栈的应用、括号匹配、表达式转换)...

    第三章:栈和队列 下面讲解栈的应用主要内容有:栈的应用.括号匹配.中 后 前 缀表达式转换 1.栈的应用 1.1括号匹配 我们在数学运算中 [(A+b)*c] - (E-F) 往往都会有[ ] 和 ( ...

  3. c语言动态双端栈的原理,数据结构(C语言版)例题(第三章:栈和队列)

    数据结构(C语言版)例题(第三章:栈和队列) 数据结构(C语言版)例题(第三章:栈和队列) (2008-05-09 12:33:13) 转载▼ ◆3.15③ 假设以顺序存储结构实现一个双向栈,即在一维 ...

  4. c语言中缀表达式求值_数据结构-第三章:栈和队列(栈的应用、括号匹配、表达式转换)

    第三章:栈和队列 下面讲解栈的应用主要内容有:栈的应用.括号匹配.中 后 前 缀表达式转换 1.栈的应用 1.1括号匹配 我们在数学运算中 [(A+b)*c] - (E-F) 往往都会有[ ] 和 ( ...

  5. 两顺序栈共享Java_数据结构与算法(三),栈与队列

    上一篇<数据结构与算法(二),线性表>中介绍了数据结构中线性表的两种不同实现--顺序表与链表.这一篇主要介绍线性表中比较特殊的两种数据结构--栈与队列.首先必须明确一点,栈和队列都是线性表 ...

  6. #问题求解与方程# 实验三 F 数据结构之栈的应用

    数据结构之栈的应用 发布时间: 2018年4月2日 20:47   时间限制: 1000ms   内存限制: 128M 描述 对于每一位学计算机的孩纸来说,数据结构(Data Structure)无疑 ...

  7. 数据结构-顺序栈、链栈

    一.堆栈的基本概念: 堆栈(也简称作栈)是一种特殊的线性表,堆栈的数据元素以及数据元素间的逻辑关系和线性表完全相同,其差别是线性表允许在任意位置进行插入和删除操作,而堆栈只允许在固定一端进行插入和删除 ...

  8. 内存、数据结构之栈和堆的区别?

    网上有一篇很好的文章,我差不多直接搬运过来了. 来源:http://www.cleey.com/blog/single/id/776.html 原文如下: 可能很多同学在这个概念上有些模糊,其实堆栈分 ...

  9. 数据结构——顺序栈和链式栈的简单实现和解析(C语言版)

    摘自:数据结构学习--顺序栈和链式栈的简单实现和解析(C语言版) 作者:正弦定理 发布时间:2020-11-26 21:26:49 网址:https://blog.csdn.net/chineseko ...

最新文章

  1. 手把手教你写ORM(三)
  2. 125.数据传输方式
  3. gdb 版本和gcc版本的对应关系_GNU发布GDB新版本 10.1和 mtools 4.0.25
  4. C++ Primer 5th笔记(chap 18 大型程序工具)命名空间特性
  5. ef mysql 数据模型,EF Core使用CodeFirst在MySql中创建新数据库以及已有的Mysql数据库如何使用DB First生成域模型...
  6. 随想(二):简化别人的工作,就是简化自己的工作,节省自己的时间
  7. ECMAScript、JavaScript与Nodejs的区别
  8. php+mysql记事本_一个简单记事本php操作mysql辅助类创建
  9. php智慧社区,智慧园区综合管理平台智慧社区解决方案
  10. mysqlbinlog结合sed命令恢复update时未加where条件之前的数据
  11. SATA学习笔记 14 ---SATA PM
  12. apt cyg 安装php,Cygwin的安装及使用apt-cyg管理软件包
  13. T细胞培养方法进展及方法学对比
  14. 终极算法——第一章:机器学习的革命
  15. DXperience的汉化步骤,相当简单
  16. MacBook安装Golang Oracle数据库驱动程序
  17. 【Shiro】shiro的Session管理
  18. 小米3com.android.phone是什么,小米3NFC是什么意思以及NFC功能怎么设置使用
  19. epic怎么添加本地游戏_反攻?steam推出游戏共享模式,一人购买全家都能玩
  20. 仿链家地图找房_全网稀缺,完整链家地图找房的实现(一)

热门文章

  1. ajax的常见几种写法以及用法
  2. TensorFlow学习笔记(十三)TensorFLow 常用Optimizer 总结
  3. Spark Shuffle Write阶段磁盘文件分析
  4. docker OOM问题排查思路
  5. ElasticSearch 实践过程中遇到的几个小问题
  6. Play! Framework 系列(四):DI 模式比较
  7. 用Redux来进行组件间通讯
  8. 编写简单的UDP应用
  9. LINUX 文件系统如何存储文件 图解
  10. Python基础教程学习笔记:第二章 列表和元组