基于顺序栈的括号匹配算法

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define MaxSize 100
typedef struct{
    char data[MaxSize];
    int top;
}SqStack;

//顺序栈的初始化
bool InitStack(SqStack &S)
{
    for(int i=0;i<MaxSize;i++)S.data[i]='\0';
    S.top=-1;
    return true;
}
//判断栈空:
bool StackEmpty(SqStack S)
{
    if(S.top==-1)return true;
    else return false;
} 
//顺序栈入栈操作:
bool Push(SqStack &S,char x)
{
    if(S.top==(MaxSize-1))return false;
    S.data[++S.top]=x;
    return true;
}
//顺序栈出栈操作:
bool Pop(SqStack &S,char &x) 
{
    if(S.top==-1)return false;
    x=S.data[S.top--];
    return true;
}
//括号匹配算法: 
bool bracketCheck(char str[],int length)
{
    SqStack S;
    
    InitStack(S);
    for(int i=0;i<length;i++)
    {
        if(str[i]=='('||str[i]=='{'||str[i]=='[')
        {
            Push(S,str[i]);
        }
        else{
            if((str[i]==')'||str[i]=='}'||str[i]==']')&&StackEmpty(S))return false;
            
            char topElem;
            Pop(S,topElem);
            if(str[i]==')'&&topElem!='(')return false;
            if(str[i]=='}'&&topElem!='{')return false;
            if(str[i]==']'&&topElem!='[')return false;
        }
    }
    return StackEmpty(S);
}

int main()
{

    char str[6] = {'{','{','}','}'};
    int length = sizeof(str)/sizeof(str[0]); // 整个数组的长度除以单个元素的长度,得到数组元素个数 
    //printf("%d",length);    //
    if(bracketCheck(str,length))
        printf("括号匹配成功,没有错误");
    else
        printf("括号匹配失败,存在错误");

}

 

posted @ 2022-05-06 15:11  七月猫合  阅读(38)  评论(0)    收藏  举报