顺序栈实现括号的匹配
时间: 2024-06-13 16:04:49 浏览: 129
用栈判断括号是否匹配
使用顺序栈实现括号匹配的步骤如下:
```C++
// 定义栈结构体
typedef struct {
char data[MAXSIZE];
int top;
} SqStack;
// 初始化栈
void InitStack(SqStack &S) {
S.top = -1;
}
// 判断栈是否为空
bool StackEmpty(SqStack S) {
if (S.top == -1) {
return true;
}
return false;
}
// 进栈
bool Push(SqStack &S, char x) {
if (S.top == MAXSIZE - 1) {
return false;
}
S.top++;
S.data[S.top] = x;
return true;
}
// 出栈
bool Pop(SqStack &S, char &x) {
if (S.top == -1) {
return false;
}
x = S.data[S.top];
S.top--;
return true;
}
// 获取栈顶元素
bool GetTop(SqStack S, char &x) {
if (S.top == -1) {
return false;
}
x = S.data[S.top];
return true;
}
// 判断括号是否匹配
bool BracketMatch(char exp[]) {
SqStack S;
InitStack(S);
int i = 0;
char e;
while (exp[i] != '\0') {
switch (exp[i]) {
case '(':
case '[':
case '{':
Push(S, exp[i]);
break;
case ')':
if (StackEmpty(S)) {
return false;
}
Pop(S, e);
if (e != '(') {
return false;
}
break;
case ']':
if (StackEmpty(S)) {
return false;
}
Pop(S, e);
if (e != '[') {
return false;
}
break;
case '}':
if (StackEmpty(S)) {
return false;
}
Pop(S, e);
if (e != '{') {
return false;
}
break;
default:
break;
}
i++;
}
if (StackEmpty(S)) {
return true;
}
return false;
}
```
以上代码实现了顺序栈的初始化、进栈、出栈、获取栈顶元素等基本操作,以及括号匹配的判断。在判断括号匹配时,遇到左括号则入栈,遇到右括号则弹出栈顶元素检查是否匹配。如果匹配则继续扫描,否则返回false。最后判断栈是否为空,如果为空则说明括号匹配成功,返回true,否则返回false。
阅读全文