栈--括号是否匹配

栈可以用来判断一个算术表达式中的括号是否匹配。编写一个函数,该函数接受一个算术表达式作为参数,返回括号缺失的位置。下面是一个括号不匹配的算术表达式的例子:2.3 + 23 / 12 + (3.14159×0.24。

首先,我们都知道括号是成双成对的,不可能有单个的括号。所以,要判断它是否匹配,是否符合条件,只需要判断有没有和它相对应的符号即可。例如 '(' 对应 ')','[' 对应 ']' ,'{' 对应 '}'。

因此,我们可以先遍历字符串,如果出现了 '('     '['    '{',可以让它进栈;若是出现相对应的符号,则让它出栈,否则,括号不匹配,返回下标位置。下面就是判断括号是否匹配的matchBracket方法:

function matchBracket(data) {
        var index=-1;
        var stack = new Stack();
        //把字符串转为数组
        var buffer = data.split();
        //获得数组的长度
        var length = buffer.length;
        for(var i=0;i<length;i++){
            //获得其中的每个字符
            var word = buffer[i];
            //indexOf如果要检索的字符串值没有出现,则该方法返回 -1
            if(['{','[','('].indexOf(word)!=-1){
                stack.push(word);
            }else{
                var peek=stack.peek();
                switch(word){
                    case '}':
                        if(peek=='{'){
                            stack.pop();
                        }else{
                            index=i;
                            return index;
                        }
                        break;
                    case ']':
                        if(peek=='['){
                            stack.pop();
                        }else{
                            index=i;
                            return index;
                        }
                        break;
                    case ')':
                        if(peek=='('){
                            stack.pop();
                        }else{
                            index=i;
                            return index;
                        }
                        break;
                }
            }
        }
        return index;
    }

至于上面提到的进栈、出栈方法,相信大家都不陌生,直接看代码好了:

1、进栈

this.dataStore = [];
这是定义的数组
this.push = function (data) {
        //获得当前下标
        var index = this.dataStore.length;
        //添加数据
        this.dataStore[index] = data;
        // this.dataStore.push(data);
    }

2、出栈

this.pop = function () {
        return this.dataStore.pop();
    }

3、取出栈顶元素

this.peek = function () {
        //获得数组的长度
        var length = this.dataStore.length;
        if (length <= 0)
            return null;
        return this.dataStore[length - 1];
    }

猜你喜欢

转载自blog.csdn.net/weixin_38629529/article/details/81165650
今日推荐