顺序栈实现括号的匹配
时间: 2024-06-13 11:04:49 浏览: 17
使用顺序栈实现括号匹配的步骤如下:
```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。
相关推荐
![docx](https://img-home.csdnimg.cn/images/20210720083331.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)