使用栈解决括号匹配
bool bracketCheck(const std::string &str) {
SqStack S;
InitStack(S);
for (auto i: str) {
if (i == '(' || i == '{' || i == '[') // i为左括号就入栈
Push(S, i);
else {
if (StackEmpty(S)) // 如果扫到右括号且当时栈空,匹配失败
return false;
char c;
Pop(S, c);
if (c == '(' && i != ')')
return false;
if (c == '[' && i != ']')
return false;
if (c == '{' && i != '}')
return false;
}
}
if (!StackEmpty(S))
return false;
return 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;
}
bool Pop(SqStack &S, char &x)
{
// 栈空
if (StackEmpty(S))
return false;
x = S.data[S.top--];
return true;
}
bool getTop(SqStack S, char &x){
if (StackEmpty(S))
return false;
x = S.data[S.top];
return true;
}