JS 栈

栈:一个后进先出的数据结构

JS中没有栈但是可以用Array来实现栈的所有功能

const stack = []
//入栈
stack.push(8)
//出栈(pop移除数组的最后一项并返回它)
const item = stack.pop()
//栈顶
stack[stack.length-1] 

栈的应用场景

  • 需要后进先出的场景
    1、十进制转二进制
    2 、判断括号是否有效闭合
    3、函数调用堆栈

十进制转二进制

十进制转二进制

后出来的余数排在前面
余数依次入栈再出栈即可实现

有效的括号(是否闭合)
(((())))
{}{}{}{}}
越靠的左括号对应的右括号越靠

从左到右遍历括号,遇到左括号入栈,遇到和栈顶括号匹配的右括号出栈(不匹配直接判断无效),最后栈空了即合法。

[leetcode 20]有效括号

给定一个只包括 '(',')','{','}','[',']' 的字符串 s ,判断字符串是否有效。

有效字符串需满足:

左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。

var isValid = function(s) {
    if(s.length%2 === 1){return false}
    const stack = []
    for(let i = 0;i<s.length;i++){
        const c = s[i]
        if(c==='('||c==='['||c==='{'){
            stack.push(c)
        }else{
            const t = stack[stack.length-1]
            if(
                (t === '('&&c===')')||
                (t === '['&&c===']')||
                (t === '{'&&c==='}')
            ){stack.pop()}else{return false}
        }
    }
    return stack.length === 0
};

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

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

}

func1()
通过VsCode 调试可看调用栈的执行步骤(打断点 F5 调用堆栈)
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 一、栈是什么? 一个后进先出的数据结构 JavaScript中没有栈,但是可以使用Array来实现栈的所有功能 代...
    蓝海00阅读 709评论 0 1
  • 20、有效的括号给定一个只包括 '(',')','{','}','[',']' 的字符串,判断字符串是否有效。 有...
    BigBigFlower阅读 505评论 0 0
  • 一 .数组 数组(Array) 是一种很常见的数据结构。它是由相同类型的元素(element)的集合所组成,并且被...
    赵客缦胡缨v吴钩霜雪明阅读 1,373评论 0 12
  • 栈 一个后进先出的数据结构 javascript中没有栈,但可以用Array实现栈的所有功能 栈的应用场景 需要后...
    羽晞yose阅读 223评论 0 0
  • 物理结构和逻辑结构 栈和队列。这两者都属于逻辑结构,它们的物理实现既可以利用数组,也可以利用链表来完成。逻辑结构依...
    sweetBoy_9126阅读 427评论 0 1