数据结构(三)栈结构模拟编译器判断括号是否匹配

来源:互联网 发布:大数据专业课程有哪些 编辑:程序博客网 时间:2024/06/04 00:29

用堆栈数据结构模拟编译器解决判断括号是否匹配问题

/** *  模拟编译器判断括号匹配问题 */public class Brackets {    public static void main(String[] args) {        System.out.println(isMatch("aa(bb){c}]"));    }    /**     * 括弧是否匹配     * @param exp 带括弧的表达式     * @return  括弧是否匹配     * 分析:遍历表达式的每个字符,如果是左括弧,放入堆栈中,如果是右括号,从堆栈中取左括号进行判断,如果不一致,错位,如果一致,继续下一个括弧判断     */    public static boolean isMatch(String exp){        boolean res = true;        //存放左括号的堆栈        Stack<Character> brackets = new Stack<Character>();        //遍历表达式中的每个字符        try{to: for (int i = 0; i < exp.length(); i++) {            char c = exp.charAt(i);            //判断是否是左括号            switch(c){            case '(' :            case '[' :            case '{' :                //左括号入栈                brackets.push(c);                break;            case ')' :{                char left = brackets.pop();                if (left != '(') {                    //不匹配,结束循环                    res = false;                    //跳出循环                    break to;                }                break;            }            case ']' :{                char left = brackets.pop();                if (left != '[') {                    //不匹配,结束循环                    res = false;                    //跳出循环                    break to;                }                break;            }            case '}' :{                char left = brackets.pop();                if (left != '{') {                    //不匹配,结束循环                    res = false;                    //跳出循环                    break to;                }                break;            }            default:                break;            }        }        //判断堆栈是否为空        if (! brackets.isEmpty()) {            //不为空,右括号少了            res = false;        }        }catch(EmptyStackException e){            //右括号多了            res = false;        }        return res;    }}
0 0
原创粉丝点击