1.栈的概念
满足先进后出,js中arr实现
const list = []
list.push(1) // 1先进2后进
list.push(2)
let item1 = list.pop() // 2 2先出1后出,即满足先进后出为栈
let item2 = list.pop() // 1
2.什么场景使用栈
场景一: 十进制转二进制 高位低位
场景二: 有效的括号((()))是letcoode中的一道题,题号是20
/*思路:
长度是奇数直接返回false
先遍历字符串遇到左括号就放进去,遇到右括号就与栈顶的数据对比是否是同类
栈为空是true
*/
function init() {
let s="(())"
if(s.length % 2 ===1){ return false}
let stack = []
for (let i = 0; i < s.length; i++) {
let c = s[i]
if(c==='(' ||c==='['|| c==='{' ) {
stack.push(c)
}else{
let t = stack[s.length-1]
if(
(c=== ')'&& t ==='(') || // 遇到第一个右括号时 与栈顶左括号对比是否是同类型 是的情况就清空当前栈顶
(c=== '}'&& t ==='{') ||
(c=== ']'&& t ==='[')
){
stack.pop() //清空当前栈顶
}else {
return false
}
}
}
return stack.length === 0
}
场景三: 函数调用堆栈?
fun1 = ()=>{
fun2()
}
fun2 = ()=>{
fun3()
}
fun3 = ()=>{
}
fun1() // 先执行fun1-》fun2-》fun3 ,执行完的顺序是fun3-》fun2-》fun1,满足先进后出
|