判断表达式中开闭括号是否配对出现。运用栈实现表达式开、闭括号是否配对出现算法
算法思想:
每次扫描到一个左括号就入栈,扫描到右括号就出一个栈顶元素,看括号类型是否匹配。
如果某次扫描到右括号发现栈中已无元素可出,则匹配失败(右括号多于左括号)
如果某次扫描到右括号,出栈顶元素,发现两个括号类型不一样,匹配失败
还有一种情况就是,你把右括号都扫描完了,结构栈中还有元素,匹配失败(左括号多于右括号)
c
bool bracketCheck(char str[], int length) {
//str是一个字符数组,里面存储了各种左括号和右括号
//len表示该字符数组有多长
SqStack S;
InitStack(&S);//初始化一个栈
for (int 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);//全部匹配完,如果栈空则匹配成功
}
int main() {
char str[6] = {'(',')','[',']','{','}'};
int len=strlen(str);
if (bracketCheck(str,6)) {
printf("匹配成功");
}
else {
printf("匹配失败");
}
return 0;
}