重学数据结构与算法(一)
· 栈:一种受限制的线性表,遵循后进先出(LIFO)原则
class Stack {
constructor () {
this.item = []
}
push (val) {
this.item.push(val)
}
pop () {
return this.item.pop()
}
peek () {
return this.item[this.item.length - 1]
}
size () {
return this.item.length
}
isEmpty () {
return this.item.length === 0
}
clear () {
this.item = []
}
}
const stack = new Stack()
stack.push(1)
stack.push(2)
console.log(stack.size())
·栈的应用:进制转换
const toBinary = function (num) {
const stack = new Stack()
let str = ''
while (num > 0) {
stack.push(num % 2)
num = Math.floor(num / 2)
}
while (!stack.isEmpty()) {
str += stack.pop()
}
return str
}
console.log(toBinary(100))
· JS中栈的应用
-
JS调用栈
- js调用栈: 用来存储所有执行上下文的执行栈
- 执行上下文: 全局执行上下文、函数执行上下文、eval执行上下文
- 执行机制: js引擎先创建全局执行上下文,将全局执行上下文压入执行栈底,当一个函数被调用时,js引擎会创建函数执行上下文,把函数执行上下文压入栈顶,当函数执行完毕,函数执行上下文会弹出并销毁,将执行下一位于栈顶的执行上下文
-
递归
function fiboncci (n) {
if (n <= 2) {
return 1
}
return fiboncci(n-1) + fiboncci(n-2)
}
function _fiboncci (n, ac1 = 1, ac2 = 1) {
if (n <= 2) {
return ac2
}
return _fiboncci(n-1, ac2, ac1 + ac2)
}
|