栈(stack)的应用——判断表达式的括号是否对称
1. 问题描述:
假设有一个使用了圆括号的算术表达式,设计一个算法判断其中的圆括号是否配对。
2. 问题分析:
首先要理解什么是配对,配对的情况是表达式中左括号的数量与右括号的数量相同,然而如何让括号配对起来呢?只要出现一个左括号那么后面就要出现一个右括号,这样可以完成配对,但是表达式当中某个括号对里面可能还有其他括号对,而且考虑到括号的一个特点——优先级,最内层的括号先配对,这样就大概可以抽象出一个简单的算法模型:先读取所有左括号,然后从最内的左括号开始,找与其配对的右括号,直到配对完所有左括号,这样的思想符合栈的 ”后进先出“。
3. 算法实现:
1)从头到尾读取表达式中的每一个字符
2)遇到左括号时,将其进栈,否则继续读取
3)如果读取到右括号时,判断栈是否为空
4)若栈空,即右括号较多,即不配对,函数返回
5)若不为空,则出栈一个左括号
6)执行以上步骤,直至字符读取完
7)判断栈是否为空
8)若空,则表达式配对,函数返回
9)若非空,即左括号多于右括号,则表达式不配对,函数返回
附:源码实现