【数据结构学习】栈:浏览器的前进和后退

在前端路上想要进阶,算法和数据结构是必须要了解的。虽然很久之前就立flag要开始刷 LeetCode,但是每次都是水几道题就不了了之。今年的flag又立起来:坚持学习算法。

种一棵树最好的时间是十年前,其次是现在。那么就从这一周开始刷题学习吧!

栈的理解

栈是一种只允许在一端插入和删除数据的线性表。栈中的数据遵循着后进先出、先进后出的规则。

在日常生活中,栈的例子有很多。比如搬家的时候,我们会把衣服(数据)依次放入箱子(栈)中,到了新家,再打开箱子把衣服一件一件拿出来。箱子顶部的衣服是最后放进去最先拿出来,而底部的衣服则是最先放进去最后拿出来。

栈的基本操作

从栈的定义里,我们知道,栈主要包含两种操作,入栈和出栈。

push(e):入栈,从栈顶压入数据

pop():出栈,从栈顶取出数据

由于JS数组本身具备了push和pop方法,所以我们在需要使用的栈这种数据结构的时候,可以直接用JS数组。

有效的括号

在前端算法面试中,出现频率非常高的一道题就是有效的括号,题目描述如下:

这是栈的一个经典应用。首先,我们声明一个栈,用来保存未匹配的左括号;然后,从左到右遍历字符串s。

当遇到左括号时,则将其入栈(push);遇到右括号时,从栈顶取出(pop)一个左括号,与该右括号进行匹配。如果能够匹配,则继续遍历剩下的字符串,否则字符串 s 无效。

当所有的括号都遍历完后,如果栈为空,说明左右括号完全匹配,并且没有多余的左括号,字符串 s 有效;否则,说明有未匹配的左括号,字符串无效。

va
  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值