什么是栈
栈是一个后进先出的数据结构。像蜂窝煤的煤炉,后进的煤是先被拿出来的。
javascript中没有栈,但是可使用Array实现栈的所有功能。栈常用操作:push、pop、stack[stack.length -1]
let stack = [];
stack.push(1);
stack.push(2);
const item1 = stack.pop(); //2
const item2 = stack.pop(); //1
应用场景:十进制转二进制
二进制:100 0011 == 十进制:35
后出来的余数反而要排到前面。把余数依次入栈,然后再出栈,就可以实现余数倒序输出
应用场景:有效的括号(力扣20)
越靠后的左括号,对应的右括号越靠前。左括号入栈,右括号出栈,最后栈为空就是合法的。
应用场景:函数调用堆栈
调用greeting函数,里面调用sayHi函数,sayHi函数最后调用,最先执行完。
最后调用的函数,最先执行完。JS解析使用栈来控制函数的调用顺序。
习题
1、使用ES6的class,封装一个Stack类,包括push、pop、peek方法
class Stack {
constructor() {
this.stack = [];
}
pop(){
return this.stack.pop();
}
push(...arg){
return this.stack.push(arg);
}
peek(){
return this.stack[this.stack.length -1];
}
}
2、请用栈这个数据结构,将100这个十进制数字转为二进制
function binary(num){
let stack = [];
while (num >= 1) {
if (num % 2 == 1) {
stack.push(1);
} else {
stack.push(0);
}
num = Math.floor(num / 2);
}
return stack.reverse();
}