基本思想:
用栈实现括号匹配,依次扫描所有字符,遇到左边括号入栈,遇到右边括号弹出栈顶元素检查是否匹配。
可能出错的情况:
1.左括号单 2.右括号单 3.左右括号不匹配
代码实现:
先定义顺序栈(考试的时候最好用顺序栈,简单),链栈也可以尝试。
//定义一个顺序栈
#define MaxSize 10
typedef struct{
char data[MaxSize]; //静态数组存放顺序栈
int top; //栈顶指针
}SqStack;
定义基本操作(中文要标清楚)。
//初始化栈
void InitStack(SqStack &S)
//判断栈是否为空
bool EmptyStack(SqStack S)
//新元素入栈
bool Push(SqStack &S,char x)
//栈顶元素出栈,用x返回
bool Pop(SqStack &S,char &x)
核心代码:
bool bracketCheck(char str[],int length){ //传一个未知大小的数组
SqStack S;
InitStack(S);
char topelem;
for(int i=0,i<length,i++){
if(str[i]=='('||str[i]=='['||str[i]=='{'){
Push(S,str[i]); //左括号进栈
}
else {
if (EmptyStack(S)) //栈空则后面不用扫描
return false;
Pop(S,topelem); //弹出栈顶元素
if(str[i]==')'&&topelem!='(')
return false;
if(str[i]==']'&&topelem!='[')
return false;
if(str[i]=='}'&&topelem!='}')
return false;
}
}
return EmptyStack(S); //检索完全部括号后,栈空表示匹配成功
}