【栈】栈在括号匹配中的应用

栈在括号匹配中的应用

题目描述:

假设一个算术表达式中包含圆括号、方括号和花括号3种类型的括号,编写一个算法判别表达式中括号是否匹配,以字符‘\0’作为算术表达式的结束符。

算法思想:

扫描每个字符,遇到圆、方、花的左括号是进栈,遇到圆、方、花的右括号时检查栈顶元素是否为相应的左括号,若是,退栈,否则匹配错误。最后栈不为空也为错误。

bool BracketCheck(char *str)
{
    InitStack(S);    //初始化栈
    int i=0;
    while(str[i]!='\0')
    {
        switch(str[i]){
            //左括号入栈
            case'(':Push(S,'('); break;
            case'[':Push(S,'['); break;
            case'{':Push(S,'{'); break;
            //遇到右括号检测栈顶
            case')':Pop(S,e);
                if(e!='(')
                    return false;
                break;
             case']':Pop(S,e);
                if(e!='[')
                    return false;
                break;
             case'}':Pop(S,e);
                if(e!='{')
                    return false;
                break;
            default:break;
        }    //switch
        i++;
    }    //while
    if(!IsEmpty(S)){
        printf("括号不匹配\n");
        return false;
    }
    else{
        printf("括号匹配\n");
        return true;
    }
}

 

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值