• 栈是一种遵从后进先出(LIFO)原则的有序集合
  • 新添加或待删除的元素都保存在栈的同一端,称作栈顶,另一端就叫栈底
  • 在栈里,新元素都靠近栈顶,旧元素都接近栈底
  • 同样的,栈也有出栈入栈操作
    • 出栈时,栈顶指针向栈底移动一位,完成最靠近栈顶的元素的逻辑出栈
    • 入栈时,栈顶指针向栈顶移动一位,然后将新元素放置在栈顶指针的位置

栈适合解决什么问题

  • 适合处理具有完全包含关系的问题
    • 表达式求值,函数递归,括号匹配问题,二叉树遍历…

栈的典型应用场景

操作系统中的线程栈

  • 线程会申请一定的空间,用于存储程序中的变量,线程空间也叫线程栈
  • 程序中经常出现函数嵌套的情况,下面代码对应变量在栈中的位置,如下图 线程栈 所示: ```javascript function func1 (){ let c; }

function func2 (){ let a; let b;

func1(); } ``` 栈 (Stack) - 图1

表达式求值

  • 可以用递归的方式来解决表达式求值问题,本质使用的是系统的栈
  • 也可以使用自己实现的栈来解决
  • 表达式可以看作是一棵二叉树

栈 (Stack) - 图2