括号在匹配中的应用
#include<bits/stdc++.h>
#define MAX_SIZE 10
using namespace std;
typedef struct
{
char data[MAX_SIZE];
int top;
}SqStack;
void InitStack(SqStack &S)
{
S.top=-1;
}
bool EmptyStack(SqStack &S)
{
if(S.top==-1) return true;
else return false;
}
bool Push(SqStack &S,char x)
{
if(S.top==MAX_SIZE) 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 BracketCherk(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(EmptyStack(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 EmptyStack(S);
}
int main()
{
char str1[]={'(','(','(','[',']',')',')',')'};
cout<<BracketCherk(str1,8)<<endl;
char str2[]={'{','{','(','(',')',')','[',']','}'};
cout<<BracketCherk(str2,9)<<endl;
char str3[]={')','(','(','[',']',')',')',')'};
cout<<BracketCherk(str3,8)<<endl;
return 0;
}
![在这里插入图片描述](https://img-blog.csdnimg.cn/ac07ef034c474aa89d3e069195c45e44.png)