栈是一种后进先出的数据结构,不过对于我们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, "")