Java自学者论坛

 找回密码
 立即注册

手机号码,快捷登录

恭喜Java自学者论坛(https://www.javazxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,会员资料板块,购买链接:点击进入购买VIP会员

JAVA高级面试进阶训练营视频教程

Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程Go语言视频零基础入门到精通Java架构师3期(课件+源码)
Java开发全终端实战租房项目视频教程SpringBoot2.X入门到高级使用教程大数据培训第六期全套视频教程深度学习(CNN RNN GAN)算法原理Java亿级流量电商系统视频教程
互联网架构师视频教程年薪50万Spark2.0从入门到精通年薪50万!人工智能学习路线教程年薪50万大数据入门到精通学习路线年薪50万机器学习入门到精通教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程MySQL入门到精通教程
查看: 437|回复: 0

【js数据结构】栈解决括号不匹配问题

[复制链接]
  • TA的每日心情
    奋斗
    4 天前
  • 签到天数: 802 天

    [LV.10]以坛为家III

    2053

    主题

    2111

    帖子

    72万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    726006
    发表于 2021-7-13 12:45:03 | 显示全部楼层 |阅读模式

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

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

    首先我们构建一个栈。

    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);
    }
    if (!stack.isEmpty())
        console.info('括号不匹配');
    

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

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

    哎...今天够累的,签到来了1...
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|小黑屋|Java自学者论坛 ( 声明:本站文章及资料整理自互联网,用于Java自学者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

    GMT+8, 2024-11-15 07:48 , Processed in 0.055449 second(s), 27 queries .

    Powered by Discuz! X3.4

    Copyright © 2001-2021, Tencent Cloud.

    快速回复 返回顶部 返回列表