数据结构与算法【JavaScript版】— 栈

栈简介

本文源码地址: 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]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值