栈是一种后进先出的数据结构,不过对于我们Javascript语言来说没有这种结构,不过我们可以通过数组中push和pop操作进行实现
1. 实现栈结构
const stack = []
stack.push(1)
stack.push (2)
const item1 = stack.pop()
const item2 = stack.pop()
2. 应用场景
- 十进制转二进制
对于十进制转二进制,我们利用栈通过将十进制的数除以2取余的数先存push进来,利用后进先出将存入的数pop出去就是二进制数值
- 有效的括号
可以根据左括号push,右括号pop的方法,最终的数组为空代表为有效括号
- 函数调用堆栈
最后调用的函数先执行完
JS解析器使用栈来控制函数的调用顺序const func1 = () => { func2() } const func2 = () => { func3() } const func3 = () => {} func1() // 先执行func1函数,再执行func2函数,再执行func3函数 //先执行完func3函数,再执行完func2函数,再执行完func3函数 // push func1 func2 func3 // pop func3 func2 func1
3. 练习
用ES6实现一个栈,class Stack
class Stack {
constructor() {
this.stack = []
this.top = 0
}
push(item) {
this.stack.push(item)
this.top ++
}
pop() {
this.top--;
return this.stack.pop()
}
peek() {
return this.stack[this.top - 1]
}
size() {
return this.top
}
clear() {
this.stack = []
}
}
请用栈这个数据结构,将100这个十进制数字转为二进制
function toTwo(num) {
var stack = []
while (num !== 0) {
stack.push(num % 2)
num = parseInt(num / 2)
}
return stack.reverse()
}
var res = toTwo(100).toString().replace(/,/g, "")