括号匹配算法

//括号匹配问题
int isMatched(char a,char b){
    if(a=='{'&&b=='}')
        return 1;
    else if(a=='['&&b==']')
        return 1;
    else if(a=='('&&b==')')
        return 1;
    else
        return 0;
}

int isParenthesesBalanced(char *exp,int len){
    char s[MAXSIZE];int top=-1;
    int i=0;
    while(i<len)
    {
        if(exp[i]=='{'||exp[i]=='('||exp[i]=='[')
            s[++top]=exp[i++];
        else if(exp[i]=='}'||exp[i]==')'||exp[i]==']')
        {
            
            if(top==-1)
                return 0;
            else if(isMatched(s[top], exp[i]))
            {
                --top;
                ++i;
            }
            else
                return 0;
        }
    }
    if(top==-1)
        return 1;
    else
        return 0;
}

void Main(){
    char a[]="{{[]}(){}[]}";
    int len=(int)strlen(a);
    bool isTrue=isParenthesesBalanced(a, len);
    printf("%d\n",isTrue);
}

需要注意几个点:

1.如果是{[(这一类的括号,可以直接入栈

2.如果是}])这一类的反括号,需要和栈顶元素进行匹配,如果匹配成功就能够继续匹配,如果匹配失败就不能再继续匹配了,直接退出。

注意在第二步当中,如果当前栈的指针是-1说明括号栈当中没有元素,也说明匹配失败。

posted @ 2021-11-03 20:53  雾漫大武汉  阅读(44)  评论(0编辑  收藏  举报