[数据结构与算法分析]栈的应用-学习笔记

平时我们很少接触到一个栈的使用,但是今天看了如下三个例子后感触颇深,对于栈应用的情况理解更深了。分享如下:

1、平衡符号

平衡是个动词,意思就是用来平衡符号的,例如关于方法里{}左右大括号的匹配问题,在许多的语言里一旦发生缺少{}很难找到错误的位置,我们这样来平衡符号,当读到{[(时压入栈中如果遇到)]}时则弹出栈,但是如果弹出的栈和触发弹出栈的符号不匹配这就说明符号不平衡:

2、后缀表达式

在计算机里如何计算具有优先级的数学公式成了问题,带有括号的更加复杂。所用的时间肯定大于O(n)。那么我们需要一种表达式来简化计算时间那就是后缀表达式

如:3+2*6=15(中缀表达式)326*+=15(中缀表达式)

其计算方式如下:

那么如何把中缀表达式转换成后缀表达式呢

1、遇到字符输出遇到操作符和“(”压栈

2、当压入一个栈的时候如果栈顶元素比压入栈的元素优先度高则开始弹出栈直到栈顶元素的优先级小于压栈元素

3、“(”只有遇到“)”才开始弹栈,并且只弹到“(”,左右括号都不输出(默认左括号优先度最高)

3、方法调用

还记得我们在java本地方法栈中讲解的么,如果不记得了请见Jvm内存分配。在这里面我们就应用了栈作为方法的调用,接下来我们详细说一说栈,举个比较常见的例子

在递归的时候,当我们要进入下一个方法的时候,我们需要存储所有的变量信息,列入寄存器的值、返回地址等,如果我们不存储的话,当递归返回的时候这些值都已经被下一个方法重写了,所以我们把它压入到栈中,直到方法结束完弹出,把存储的信息再赋值回去。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值