一文让你快速了解JavaScript栈

作者:??一碗周? 时间:2024-04-29 13:22:04 

前言

前面两篇文章介绍了数据结构和算法的一些前置内容,这篇文章开始正式学习常见的数据结构,首先学习的就是(Stack)。

什么是栈?

栈全称为堆栈,是一种先进后出的的数据结构,栈中只有两种基本操作,也就是插入删除,也就是入栈和出栈操作栈只有一端可以进行入栈和出栈操作,我们将其称为栈顶,另一端称其为栈底;如下图展示了栈这个数据结构:

一文让你快速了解JavaScript栈

JavaScript中的栈

JavaScript并没有栈这个数据类型,但是可以通过数组进行模拟,而且数组中提供的push()pop()选项,正好实现先入后出的的操作,

示例代码如下:

const stack = []

// 入栈
stack.push(1)
stack.push(2)
// 出栈
const v1 = stack.pop() // 2
const v2 = stack.pop() // 1

栈的应用场景

栈是算法和程序中最常用的辅助结构,其的应用十分广泛,凡是需要先进后出场景都有栈的身影,比如:

  • 函数调用堆栈

  • 判断字符串括号是否有效

接下来我们依次来看:

函数调用堆栈

JavaScript中的函数调用堆栈就是一个应用栈的一个典型例子,比如下面这段代码:

function f1() {}
function f2() {
 f1()
}
function f3() {
 f2()
}
f3()

如下图:

一文让你快速了解JavaScript栈

执行过程如下:

  • 调用函数f3(),将f3压入堆栈;

  • f3()中调用了f2(),将f2压入堆栈;

  • f2()中又调用了f1(),将f1压入堆栈;

  • 只有f1()运行完成才能继续往下执行,所以f1()先出栈,以此类推。

有效的括号

有效的括号是力扣中的一个关于栈的算法题目,题目大意就是判断给定字符串中的括号是否匹配,匹配返回true,否则返回false

解题思路如下:

  • 判断字符串的长度是否为偶数,不为偶数直接返回false,因为括号都是成对出现的;

  • 新建一个栈;

  • 遍历字符串,遍历到每一项时如果时左括号,将其压入栈;如果是右括号,与栈顶对比,如果相匹配则出栈,不匹配则返回false

实现代码如下:

/**
* @param {string} s
* @return {boolean}
*/
var isValid = function(s) {
   if (s.length % 2 !== 0) 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
           }
       }
   }
   // 如果为0表示全部匹配,有剩余则表示不匹配
   return stack.length === 0
};

肯有还有更优的写法,这里直接使用的暴力解法。

来源:https://juejin.cn/post/7106520796901670926

标签:JavaScript,栈
0
投稿

猜你喜欢

  • python语言中pandas字符串分割str.split()函数

    2022-01-30 16:55:56
  • go语言 bool类型的使用操作

    2024-04-26 17:35:03
  • Python3爬虫学习之应对网站反爬虫机制的方法分析

    2022-04-17 08:44:16
  • 可以拖动的div 实现代码第1/2页

    2024-03-19 17:46:20
  • Python读写二进制文件的实现

    2023-07-20 14:48:52
  • pytorch中的 .view()函数的用法介绍

    2022-10-15 19:50:17
  • 30分钟快速实现小程序语音识别功能

    2024-04-28 09:46:27
  • “您无权查看该网页”的原因和解决方法

    2008-03-24 16:57:00
  • golang gorm更新日志执行SQL示例详解

    2024-04-23 09:46:24
  • js查找/搜索页面中的字符源代码

    2008-02-17 17:13:00
  • python使用循环打印所有三位数水仙花数的实例

    2022-07-02 09:58:59
  • mysql中插入表数据中文乱码问题的解决方法

    2024-01-18 07:49:06
  • Python PyPDF2模块安装使用解析

    2023-02-27 15:13:52
  • Python实现脚本锁功能(同时只能执行一个脚本)

    2023-10-03 00:55:51
  • node.js回调函数之阻塞调用与非阻塞调用

    2024-05-05 09:21:26
  • Python之捕捉异常详解

    2022-06-10 02:27:30
  • 构建成功web应用的十项黄金法则

    2010-09-17 19:11:00
  • 菜鸟课堂:MySQL权限的详细解答

    2009-09-03 11:43:00
  • 在IE 浏览器中使用 jquery的fadeIn() 效果 英文字符字体加粗

    2011-06-06 10:28:00
  • python放大图片和画方格实现算法

    2023-05-21 15:22:41
  • asp之家 网络编程 m.aspxhome.com