- 栈是一种遵从后进先出(LIFO)原则的有序集合
- 新添加或待删除的元素都保存在栈的同一端,称作栈顶,另一端就叫栈底
- 在栈里,新元素都靠近栈顶,旧元素都接近栈底
- 同样的,栈也有出栈入栈操作
- 出栈时,栈顶指针向栈底移动一位,完成最靠近栈顶的元素的逻辑出栈
- 入栈时,栈顶指针向栈顶移动一位,然后将新元素放置在栈顶指针的位置
栈适合解决什么问题
- 适合处理具有完全包含关系的问题
- 表达式求值,函数递归,括号匹配问题,二叉树遍历…
栈的典型应用场景
操作系统中的线程栈
- 线程会申请一定的空间,用于存储程序中的变量,线程空间也叫线程栈
- 程序中经常出现函数嵌套的情况,下面代码对应变量在栈中的位置,如下图
线程栈
所示: ```javascript function func1 (){ let c; }
function func2 (){ let a; let b;
func1();
}
```
表达式求值
- 可以用递归的方式来解决表达式求值问题,本质使用的是系统的栈
- 也可以使用自己实现的栈来解决
- 表达式可以看作是一棵二叉树