一起学算法-栈

107 阅读1分钟

一、栈简介

  • 栈其实就是一个后进先出的结构,类似于生活中的一桶羽毛球,一个一个装成桶,最后放进去的却要第一个被拿出来。

images.jpeg

  • 在JavaScript中其实没有栈,但是我们可以用Array实现栈的所有功能

二、栈的基本操作

const stack = []
stack.push(1) //入栈操作
stack.pop()   //出栈操作 
const top = stack[stack.length - 1] //获取栈顶元素

三、栈的应用场景

  • 一句废话,就是所有需要后进先出的场景,我们都可以用栈,所以我们需要明白的就是,哪些场景是后进先出的,举个例子:
  1. 十进制转二进制(余数先入栈,在出站,就是我们想要的二进制)
  2. 函数调用堆栈调用
  3. 有效的括号类问题

四、leetcode20 有效的括号

  • 这道题就是栈的一个应用场景
  • 新建一个栈
  • 遍历字符串,首先是遇到左括号我们就执行入栈操作,遇到右括号就与栈顶元素作比较,如果能成功匹配就执行出栈操作, 不能就返回false
  • 最后考虑边界情况

未命名文件.jpg

carbon.png

  • 时间复杂度和空间复杂度都是O(n)
  • 其实这道题目还有其他解法,比如用字典(学习map时会写出答案)