栈的括号匹配

1.括号匹配的原则

在一个表达式当中存在三种括号:小括号,中括号和大括号。各种括号之间允许嵌套,但是不能存在交叉的情况:

([]{})//正确
([()])//正确
{([])}//正确
{([)]}//不正确
{(}[])//不正确

2.代码实现方法

再检验一个表达式是否正确的情况下,我们借助栈的作用,通过遍历的方法,来实现检验表达式,即(括号匹配)。
在匹配过程中,当遍历到一个元素时:
        1:当栈中没有元素,即将该元素插入到栈里面
        2:如果该元素是:'(' , '{' , '[' 则直接将其插入到栈中
        3:如果是:')' , '}' , ']',我们应该将其与栈顶元素进行匹配,如果是匹配的,将栈顶元素弹出并与该元素一起输出;如果不是匹配的,则匹配错误。

3.代码实现

int Match(char c[])
{
    int i = 0;
    sequence_stack s;//定义一个栈
    init(&s);//置空这个栈
    while(c[i] != '#')
    {
        switch(c[i])
        {
            case '{':
            case '(':
            case '[':push(&s,c[i]);break;//三种属于一种情况
            case '}':if(!(empty(s)&&read(s)=='{')//匹配成功
                    {    pop(&s);
                           break;
                    }
                    else return 0;
            case ']':if(!(empty(s)&&read(s)=='[')//匹配成功
                    {    pop(&s);
                           break;
                    }
                    else return 0;
            case ')':if(!(empty(s)&&read(s)=='(')//匹配成功
                    {    pop(&s);
                           break;
                    }
                    else return 0;
            }
        i++;
    }
return (empty(s));//如果栈中还保留元素 说明匹配失败
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值