栈结构应用
栈的规则
- 栈遵循后进先出的规则 last in first out
- 新的元素进入 称为 进栈 压栈 新的元素放在栈顶上面
- 删除称为 退栈 出栈,将栈顶元素删除
- 类似生活中的自助餐托盘,后放上去的总是被先拿走
函数调用栈
- A函数调用B函数 会将B函数压入栈顶,A在栈底
- B函数没有执行完就不会弹出栈,此时B函数调用C函数,C函数压入栈顶
- 当前顺序为 栈底A > B > C栈顶
- C执行完,弹出栈,依次为 C > B > A
- 递归会一直调用,无法弹出栈,所以为导致栈溢出
面试题
有6个元素,6/5/4/3/2/1的顺序进栈,下列哪一个不是合法的出栈顺序( )
A. 5 4 3 6 1 2 B. 4 5 3 2 1 6 C. 3 4 6 5 2 1 D. 2 3 4 1 5 6
栈结构实现
栈的封装
// 基于数组
function Stack (){
//栈中的属性
this.items = []
}
// 使用栈
const s = new Stack()
// 栈的操作
s.items.push()
s.items.pop()
//...
栈的使用
// 10 进制 转 2 进制
function to2(parms) {
let stk = []
while (parms > 0) {
stk.push(parms % 2)
parms = Math.floor(parms / 2)
}
let str = ""
while (stk.length !== 0) {
str += stk.pop()
}
return str
}
console.log(to2(100))