一文让你快速了解JavaScript栈
作者:??一碗周? 时间:2024-04-29 13:22:04
前言
前面两篇文章介绍了数据结构和算法的一些前置内容,这篇文章开始正式学习常见的数据结构,首先学习的就是栈(Stack)。
什么是栈?
栈全称为堆栈,是一种先进后出的的数据结构,栈中只有两种基本操作,也就是插入和删除,也就是入栈和出栈操作,栈只有一端可以进行入栈和出栈操作,我们将其称为栈顶,另一端称其为栈底;如下图展示了栈这个数据结构:
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()
如下图:
执行过程如下:
调用函数
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