#include <stdio.h>
#define MaxSize 10 //定义栈中元素的最大个数
typedef struct {
char data[MaxSize]; //静态数组存放栈中元素
int top; //栈顶指针
}SqStack;
int main(){
bool brackCheck(char str[],int length);
char aaa[6] = {'(','(','{','}',')',')'};
int a=1;
a =brackCheck(aaa,6);
printf("%d",a);
return 0;
}
bool brackCheck(char str[],int length){
void InitStack(SqStack &S);
bool Push(SqStack &S,char x);
bool Pop(SqStack &S,char &x);
bool StackEmpty(SqStack S);
SqStack S;
InitStack(S);
int i;
for(i=0;i<length;i++){
if(str[i]=='('||str[i]=='['||str[i]=='{'){
Push(S,str[i]); //扫描到左括号,入栈
}else{
if(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); //检查完所有元素栈空返回true
}
//初始化栈
void InitStack(SqStack &S){
S.top = -1;
}
//判断栈是否为空
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;
}
//栈顶元素出栈,用x返回
bool Pop(SqStack &S,char &x){
if(S.top==-1){
return false; //栈空
}
x =S.data[S.top--];
return true;
}