栈--括号是否匹配

栈可以用来判断一个算术表达式中的括号是否匹配。编写一个函数,该函数接受一个算术表达式作为参数,返回括号缺失的位置。下面是一个括号不匹配的算术表达式的例子: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];
    }

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值