「这是我参与2022首次更文挑战的第4天,活动详情查看:2022首次更文挑战」。
什么是栈
-
栈是一种遵从后进先出(LIFO)原则的有序集合
-
新添加或待删除的元素都保存在栈的同一端,称作栈顶,另一端就叫栈底
-
在栈里,新元素都靠近栈顶,旧元素都接近栈底
-
同样的,栈也有出栈入栈操作
- 出栈时,栈顶指针向栈底移动一位,完成最靠近栈顶的元素的逻辑出栈
- 入栈时,栈顶指针向栈顶移动一位,然后将新元素放置在栈顶指针的位置
-
在生活中也有很多栈的应用场景
-
餐厅里放着一叠盘子
- 当我们继续往上叠放盘子,就是入栈操作
- 当我们从最上面那走盘子,就是出栈操作
-
书房里面放着一摞书
- 当我们进行入栈操作时,就是往上放书
- 当我们进行出栈操作时,就是从上面拿走书
-
栈适合解决什么问题
- 一句话解释:适合处理具有完全包含关系的问题
- 什么是具有完全包含关系的问题:
- 表达式求值
- 函数递归
- 括号匹配问题
- 二叉树遍历
- ...
栈的典型应用场景
操作系统中的线程栈
- 线程会申请一定的空间,用于存储程序中的变量,线程空间也叫线程栈
- 程序中经常出现函数嵌套的情况,下面代码对应变量在栈中的位置,如下图
线程栈所示:
function func1 (){
let c;
}
function func2 (){
let a;
let b;
func1();
}
表达式求值问题
- 可以用递归的方式来解决表达式求值问题,本质使用的是系统的栈
- 也可以使用自己实现的栈来解决
- 表达式可以看作是一棵二叉树
最后
- 栈的分享就到这里了,欢迎大家在评论区里面讨论自己的理解 👏。
- 如果觉得文章写的不错的话,希望大家不要吝惜点赞,大家的鼓励是我分享的最大动力🥰