1 栈的应用
栈在很多面试的问题中都会被问到,其实按照我的理解栈的应用就是递归的应用。所以接下来将会介绍一些有关栈的应用,当你看到这些应用,会有一种感觉:这特么不就是递归吗?
OK,话不多说,开始栈的应用
1.1 递归
栈在程序设计中具有非常广泛的应用,其中递归的应用是求职者必须知道的。在此之前我们先了解一下递归,然后再解释如何应用栈实现递归。
递归的概念
想必大家都看过《盗梦空间》,主人公在梦里不断陷入一个接一个的梦中,从最浅层的梦逐步深入到更深的梦中,直至自己也不知道自己是在梦中还是现实中了。如果主人公学过递归,应该就能成功退出梦幻,哈哈哈,开个玩笑。在这里,我讲一下个人理解的递归:通过不断调用函数自身进行压栈,直至终止条件,将其结果计算出来进行弹栈,并将结果返回给弹栈之后的栈顶,一直弹栈到栈空为止。
可能我这段说辞有点绕。那给大家搞点形象的。
看完上面这幅图,相信很多同学对栈的概念有了更深的理解。接下来我们将通过一些实际的案例进一步解释栈在递归方面的应用。
遍历文件
我相信很多同学看到递归的应用,第一时间肯定是浏览器。因为这个例子已经被用烂了,我们在平时使用浏览器的时候,当需要返回上一个页面的时候,可以使用返回键,然后之前的页面能够迅速地被刷新出来。其实这里面就是运用了栈,顺序点击查看的网页界面一个个都被压栈。当你按下返回按钮,当前页面就被弹栈出去了。
但是今天我们讲一个更具工程应用价值的例子-遍历文