使用栈来判断算术表达式中的括号是否匹配

栈是一种后入先出(LIFO,last-in-first-out)的数据结构。express

假设有一个算术表达式数据结构

let expression = '2.3 + 23 / 12 + (3.14159 * 0.24';

利用后入先出的这个特色,对字符串(算术表达式)进行遍历,若是遇到左括号"(",就把字符"("压入栈code

for (let i = 0; i < length; i++) {
    if (expression[i] === '(') {
        stack.push('(');
    }
}

若是遇到右括号")",就把栈顶的字符弹出栈字符串

if (expression[i] === ')') {
    if (stack.length > 0) {
        stack.pop();
    }
}

有两种状况能够判断表达式的括号是否匹配io

  1. 字符串遍历结束后,栈的长度不为零,说明表达式缺乏了右括号
  2. 字符串遍历过程当中,若是在作弹出栈的动做时,发现栈的长度已经为零,说明表达式缺乏左括号;

完整代码以下:ast

function check(expression) {
    let length = expression.length,
        stack = [];

    for (let i = 0; i < length; i++) {
        if (expression[i] === '(') {
            stack.push('(');
        } else if (expression[i] === ')') {
            if (stack.length > 0) {
                stack.pop();
            } else {
                return false;
            }
        }
    }

    return (stack.length <= 0) ? true : false;
}
相关文章
相关标签/搜索