一、栈是什么
1、定义
堆栈(stack)又称为栈或堆叠,是计算机科学中的一种抽象资料类型,只允许在有序的线性资料集合的一端(称为堆栈顶端,top)进行加入数据(push)和移除数据(pop)的运算。因而按照后进先出(LIFO, Last In First Out)的原理运作,堆栈常用一维数组或链接串列来实现。常与另一种有序的线性资料集合队列相提并论。(维基百科)
堆栈又名栈(stack),它是一种运算受限的线性表。限定仅在表尾进行插入和删除操作的线性表。这一端被称为栈顶,相对地,把另一端称为栈底。向一个栈插入新元素又称作进栈、入栈或压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素;从一个栈删除元素又称作出栈或退栈,它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素。(百度百科)
2、JS 操作实现
堆栈使用两种基本操作:推入(压栈,push)和弹出(弹栈,pop)
const stack = []
入栈:Array.prototype.push()
出栈:Array.prototype.pop()
3、特点
先入后出,后入先出。
二、通常用来干什么,解决哪些问题
- 判断括号的合法性。
- 查看栈顶元素
- 单调栈(核心:及时去掉无用数据,保证栈中的数据有序。)
三、常见的面试题
单调栈:
四、前端应用场景
- 浏览器历史记录管理:当用户在浏览器中导航到不同的页面时,浏览器会使用栈来管理浏览历史记录。每次用户访问一个新页面或者点击返回按钮时,当前页面的 URL 将被推入历史记录栈中。当用户点击前进按钮时,最近访问的页面 URL 将被弹出栈并加载到浏览器中。
- 路由管理:单页应用(SPA)中,路由管理器通常使用栈来跟踪用户的导航历史。当用户从一个路由导航到另一个路由时,当前路由会被推入栈中,当用户点击后退按钮时,最近的路由会被弹出栈并加载到页面中。
- 事件处理:当浏览器接收到事件时,事件处理器通常使用栈来跟踪事件的处理过程。例如,当用户点击按钮时,浏览器会将相应的事件推入栈中,并按照先进后出的顺序依次执行事件处理器。
- 模板解析:在前端模板引擎中,解析器通常使用栈来跟踪模板标签的嵌套结构。当解析器遇到开始标签时,会将标签推入栈中;当遇到结束标签时,会从栈中弹出相应的开始标签,以确保标签的嵌套关系正确。
以上,简单总结。