(三)数据结构之“栈”
数据结构之“栈”
- 栈是什么
- 栈的应用场景
- 场景一:十进制转二进制
- 场景二:有效的括号
- 场景三:函数调用堆栈
- 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这个十进制数字转为二进制。
(三)数据结构之“栈”相关推荐
- 【数据结构总结】第三章:栈和队列(线性结构)
第三章:栈和队列(线性结构) 提示:本文主要是以思维导图的形式概括数据结构第一章的精华内容,基本不会用到文字性的内容,目的是为了给大家梳理每个重要的知识点的相关概念,方便大家在复盘的时候快速阅读和浏览 ...
- c++数据结构队列栈尸体_数据结构-第三章:栈和队列(栈的应用、括号匹配、表达式转换)...
第三章:栈和队列 下面讲解栈的应用主要内容有:栈的应用.括号匹配.中 后 前 缀表达式转换 1.栈的应用 1.1括号匹配 我们在数学运算中 [(A+b)*c] - (E-F) 往往都会有[ ] 和 ( ...
- c语言动态双端栈的原理,数据结构(C语言版)例题(第三章:栈和队列)
数据结构(C语言版)例题(第三章:栈和队列) 数据结构(C语言版)例题(第三章:栈和队列) (2008-05-09 12:33:13) 转载▼ ◆3.15③ 假设以顺序存储结构实现一个双向栈,即在一维 ...
- c语言中缀表达式求值_数据结构-第三章:栈和队列(栈的应用、括号匹配、表达式转换)
第三章:栈和队列 下面讲解栈的应用主要内容有:栈的应用.括号匹配.中 后 前 缀表达式转换 1.栈的应用 1.1括号匹配 我们在数学运算中 [(A+b)*c] - (E-F) 往往都会有[ ] 和 ( ...
- 两顺序栈共享Java_数据结构与算法(三),栈与队列
上一篇<数据结构与算法(二),线性表>中介绍了数据结构中线性表的两种不同实现--顺序表与链表.这一篇主要介绍线性表中比较特殊的两种数据结构--栈与队列.首先必须明确一点,栈和队列都是线性表 ...
- #问题求解与方程# 实验三 F 数据结构之栈的应用
数据结构之栈的应用 发布时间: 2018年4月2日 20:47 时间限制: 1000ms 内存限制: 128M 描述 对于每一位学计算机的孩纸来说,数据结构(Data Structure)无疑 ...
- 数据结构-顺序栈、链栈
一.堆栈的基本概念: 堆栈(也简称作栈)是一种特殊的线性表,堆栈的数据元素以及数据元素间的逻辑关系和线性表完全相同,其差别是线性表允许在任意位置进行插入和删除操作,而堆栈只允许在固定一端进行插入和删除 ...
- 内存、数据结构之栈和堆的区别?
网上有一篇很好的文章,我差不多直接搬运过来了. 来源:http://www.cleey.com/blog/single/id/776.html 原文如下: 可能很多同学在这个概念上有些模糊,其实堆栈分 ...
- 数据结构——顺序栈和链式栈的简单实现和解析(C语言版)
摘自:数据结构学习--顺序栈和链式栈的简单实现和解析(C语言版) 作者:正弦定理 发布时间:2020-11-26 21:26:49 网址:https://blog.csdn.net/chineseko ...
最新文章
- 手把手教你写ORM(三)
- 125.数据传输方式
- gdb 版本和gcc版本的对应关系_GNU发布GDB新版本 10.1和 mtools 4.0.25
- C++ Primer 5th笔记(chap 18 大型程序工具)命名空间特性
- ef mysql 数据模型,EF Core使用CodeFirst在MySql中创建新数据库以及已有的Mysql数据库如何使用DB First生成域模型...
- 随想(二):简化别人的工作,就是简化自己的工作,节省自己的时间
- ECMAScript、JavaScript与Nodejs的区别
- php+mysql记事本_一个简单记事本php操作mysql辅助类创建
- php智慧社区,智慧园区综合管理平台智慧社区解决方案
- mysqlbinlog结合sed命令恢复update时未加where条件之前的数据
- SATA学习笔记 14 ---SATA PM
- apt cyg 安装php,Cygwin的安装及使用apt-cyg管理软件包
- T细胞培养方法进展及方法学对比
- 终极算法——第一章:机器学习的革命
- DXperience的汉化步骤,相当简单
- MacBook安装Golang Oracle数据库驱动程序
- 【Shiro】shiro的Session管理
- 小米3com.android.phone是什么,小米3NFC是什么意思以及NFC功能怎么设置使用
- epic怎么添加本地游戏_反攻?steam推出游戏共享模式,一人购买全家都能玩
- 仿链家地图找房_全网稀缺,完整链家地图找房的实现(一)