栈是一种数据结构,它有着先进后出(Last In, First Out,LIFO)的特点,即后进入的元素先出栈。在计算机科学中,栈被广泛应用,包括编译器,操作系统,算法等等。本文将从多个角度分析,在什么过程中要用到栈。
一、编译器
编译器将源代码翻译成机器可执行的代码。编译器在翻译源代码时,需要对表达式做出计算。而计算式的计算顺序往往是由括号的嵌套决定的。编译器用到的栈,又被称为运算符栈(operator stack)。编译器又以两个栈为基础,分别是运算符栈和操作数栈(operand stack)。在计算表达式的时候,运算符先入栈,运算数再入栈,如果运算符当前栈顶的优先级高于等于新运算符,则将运算符取出与运算数一起计算;否则将新的运算符入栈。这样就可以正确地计算表达式。在编译器中应用栈的思想与计算器类似。
二、操作系统
操作系统的内存管理器中,也会用到栈。在调用函数时,计算机需要为函数的参数、返回地址和局部变量分配内存。这些内存放在栈的顶端,函数的执行完成后,内存被弹出,返回地址将CPU控制权重新转回到调用函数的位置。
三、算法
1.括号匹配
括号匹配是常见的算法问题。用栈来实现括号匹配算法非常方便。我们将所有左括号都入栈,并以遇到相应的右括号时,弹出左括号,最后检查栈是否为空,即可知道所有的括号是否匹配。
2.逆波兰表达式
逆波兰表达式就是一种不含括号的表达式,它可以用来计算表达式的值。对于逆波兰表达式,可以用栈来求值。遇到操作数时,将其入栈;遇到运算符时,将栈顶的两个操作数弹出进行运算,并将运算结果压入栈中。
微信扫一扫,领取最新备考资料