栈简介
本文源码地址: JS数据结构与算法
什么是栈
- 一个后进先出的数据结构
- JavaScript中没有栈,但可以用Array实现栈的所有功能
实例代码 —— 在JS中实现并运用栈
- 实例代码
// 初始化一个数组
const stack = [];
// 入栈
stack.push(1);
stack.push(2);
// 出栈
const item1 = stack.pop(); // 移除数组最后一项并返回移除的item
const item2 = stack.pop();
- 单步调试
在VSCode中可以按下F5,在NodeJS中执行脚本代码,并可以设置断点进行单步调试,通过左侧的Variables中可以看到pop会把后进栈的内容进行优先输出
什么场景下使用栈
栈的应用场景
- 需要后进先出的场景
- 比如:十进制转二进制、判断字符串的括号是否有效、函数调用堆栈…
场景1:十进制转二进制
- 后出来的余数反而要排在前面
- 实现做法:把余数依次入栈,然后再出栈,就可以实现余数倒序输出
场景2:有效的括号
- 问题描述:给出一系列括号,计算数据中的括号是否都是有效的闭合
- 实现思路:越靠后的左括号,对应的右括号就是越靠前。左括号入栈,右括号出栈,最后栈空了就是合法的
场景3:函数调用堆栈
- 最后调用的函数,最先执行完。调用greeing(),需要先执行sayHi()之后才会执行greeting()。
- JS解释器使用栈来控制函数的调用顺序。
前端与栈 —— JS中的函数调用堆栈
//函数调用堆栈
const func1 = () => {
func2();
};
const func2 = () => {
func3();
};
const func3 = () => {};
func1();
- 通过在VSCode进行debug,可以查看到函数调用堆栈的全过程,func1/2/3依次进栈,func3/2/1再依次出栈
章节总结
技术要点
- 栈是一个后进先出的数据结构
- JavaScript中没有栈,但可以用Array实现栈的所有功能
- 栈常用操作:push、pop、stack[strack.length - 1]