zoukankan      html  css  js  c++  java
  • 【js数据结构】栈解决括号不匹配问题

    栈可以用来判断一个算术表达式中的括号是否匹配。

    思路:读取算术表达式,遇到左括号‘{’、‘[’、'('压入栈,栈的特点是后入先出,所以当遇到右括号‘}’、‘]’、')'的时候,取出栈顶元素,是否满足读取的右括号,栈顶是与之相匹配的左括号。最后判断栈是否为空,为空证明该表达式没有问题,否则则说明这个表达式存在括号不匹配问题。

    首先我们构建一个栈。

    function Stack(){
        this.top = 0;           //栈顶(属性)
        this.arr = [];           //用来存放栈的数组(属性)
        this.push = push;   //添加元素(方法)
        this.pop = pop;       //取出栈顶的元素 (方法)  
        this.peek = peek;    //读取栈顶元素 (方法)
        this.clear = clear;    //清空栈 (方法)
        this.len = len;         //返回栈的长度 (方法)
        this.isEmpty = isEmpty;        //栈是否为空 (方法)
    }       
    

     函数实现:

    function push(ele){
        this.arr[this.top++] = ele;
    }
    function pop(){
        return this.arr[--this.top];
    }
    
    function peek(){
        return  this.arr[this.top-1];
    }
    
    function clear(){
        delete  this.arr;
        this.top = 0;
        this.arr = [];
    }
    
    function len(){
        return this.top;
    }
    function isEmpty(){
        if (this.len() <= 0)
            return true;
        else
            return false;
    }
    

      特别的,peek()与pop()函数不同在于,peek()只是读取栈顶,而不修改栈顶,而pop()是取出栈顶的元素,栈将压出栈顶元素。

      SignUp()函数接收两个参数,栈对象stack和读取的元素ele

    function SignUp(stack, ele){
    
        switch (ele) {
            case '{':
            case '[':
            case '(':
                stack.push(ele);
                break;
            case '}':
            case ']':
            case ')':
                topEle = stack.pop();
                console.info(stack.top)
                if(( topEle=='{'&&ele == '}')|| topEle=='('&&ele == ')'|| topEle=='['&&ele == ']') {
                    console.info('ok')
                }
                else{
                    console.info('括号不匹配');
                    return;
                }
                break;
        }
    }
    

      接下来就是new一个栈对象,读取表达式,然后一个一个调用SignUp函数了

    input1 = document.getElementById('input1').value;
    for(var i = 0; i<input1.length; i++)
    {
        SignUp(stack, input1[i]);
    }
    if (!stack.isEmpty())
        console.info('括号不匹配');
    

      这里,我使用的是在html页面放置一个id叫input1的input标签,js获取其value后使其每一个字符都调用一次SignUp函数,最后判断栈内是否为空~

      代码又不完善之处还请各位大人多多提醒,小女子这厢有礼了>.<

  • 相关阅读:
    <<一线架构师实践指南>>读书笔记之二PA阶段
    【读书笔记】简约至上交互设计四策略第4章 删除
    大数据量简单数据查询设计思考
    识别项目干系人
    【读书笔记】简约至上交互设计四策略第3章 简约四策略
    【读书笔记】简约至上交互设计四策略第2章 明确认识
    【读书笔记】简约至上交互设计四策略第1章 话说简单
    采购管理计划
    项目管理整体的一些基本概念1
    【读书笔记】简约至上交互设计四策略第5章 组织
  • 原文地址:https://www.cnblogs.com/xiabaoying/p/6559180.html
Copyright © 2011-2022 走看看