一、栈的括号匹配问题
①:看左边的图,从左往右数最后出现的左括号是④,接下来是右括号④,从而④率先被匹配。
②:右图所示,当遇到左括号时,将其压入栈中,当遇到右括号,就将栈顶的左括号弹出,检查他们俩是否匹配。
遇到不匹配的就算是失败了,不用继续扫描了。
从这个例子中可以看出,写代码的时候,在扫描完成之后需要检查栈是否为空,如果不为空,说明“失败了”
二、栈在表达式求值中的应用
中缀表达式转后缀表达式
“-”入栈之后,下一个遇到的是“”,而“-”的优先级要低,所以“-”号先不能出栈,而“”后面不知道有没有括号,所以“*“先入栈。
遇到”/“之后,”*“出栈,不知道”/“后面是不是有括号,先将其入栈。
如果此时是”(“是栈顶,是不需要出栈的,把此时的”-“压入栈,直到遇到”)“,则依次出栈。
这个算法是中缀表达式求值与中缀表达式转后缀的结合。
三、栈在递归中的应用