栈
栈是一个后进先出的数据结构。 前端的JavaScript语言中没有栈,但是可以用数组(Array)实现栈的所有功能。 进栈的方法是push,出栈的方法是pop
let arr = []
arr.push(1)
arr.push(2)
arr.pop()
console.log(arr)
栈的应用场景
需要后进先出的场景 比较典型的就是函数嵌套的调用堆栈。最深处调用的函数,也就是最后调用的函数,最先执行完。js解释器就是使用栈来控制函数的调用顺序的。
栈的练习:面试常见算法题:
题目:给定一个只包括 ‘(‘,’)’,’{‘,’}’,’[‘,’]’ 的字符串,判断字符串是否有效
- 左括号必须用相同类型的右括号闭合。
- 左括号必须以正确的顺序闭合。
- 注意空字符串可被认为是有效字符串。
解题思路:
- 新建一个栈
- 扫描字符串,遇到左括号入栈,遇到和栈顶括号类型匹配的右括号就出栈, 如果类型不匹配,直接判断为不合法
- 最后扫描完,如果栈是空的就合法,否则不合法
代码(JavaScript)
let result = function(str){
if(str.length%2!==0){
return false
}
let stack = []
for(let i =0;i<str.length;i++){
let s = str[i]
if(s === '(' || s ==='[' || s ==='{'){
stack.push(s)
}else{
let top = stack[stack.length -1]
if((top === '(' && s === ')')||(top === '[' && s === ']')||(top === '{' && s === '}')){
stack.pop()
}else{
return false
}
}
}
return stack.length === 0
}
let s = result('(((((({{{[}}}))))))')
console.log(s); // false