C语言用栈结构实现括号匹配
时间: 2024-08-12 09:10:06 浏览: 65
在C语言中,使用栈结构实现括号匹配(如圆括号、花括号和方括号)是一种常见的算法问题。这种方法通常用于验证一个给定的字符串中的括号是否正确配对。栈数据结构的一个关键特性是后进先出(LIFO),这使得我们可以按照括号的打开顺序将它们压入栈,然后在遇到关闭符号时检查栈顶元素是否对应。
以下是实现这个功能的基本步骤:
1. 初始化一个空栈。
2. 遍历输入的字符串,对于每个字符:
a. 如果遇到一个左括号(如'('、'{'或'['),将其压入栈中。
b. 如果遇到一个右括号,检查栈顶元素是否是对应的左括号:
- 如果是,弹出栈顶元素,继续遍历。
- 如果不是,返回false,因为括号不匹配。
3. 如果遍历完整个字符串后栈为空,说明所有的左括号都有对应的右括号,返回true;否则,返回false。
下面是一个简单的C代码示例:
```c
#include <stdbool.h>
#include <stdio.h>
#include <stdlib.h>
bool isValid(String str) {
stack *s = initStack(); // 初始化一个空栈
for (int i = 0; str[i] != '\0'; ++i) {
if (str[i] == '(' || str[i] == '{' || str[i] == '[') {
push(s, str[i]); // 压入左括号
} else if (str[i] == ')' || str[i] == '}' || str[i] == ']') {
if (isEmpty(s)) {
return false; // 如果栈空,直接返回false
}
char top = pop(s); // 弹出栈顶元素
if (top != str[i] - 1) { // 检查是否匹配
return false;
}
}
}
return isEmpty(s); // 遍历完后,栈为空则括号匹配
}
// 定义栈和相关的操作...
// ...
int main() {
String str = "({[[]])";
if (isValid(str)) {
printf("括号匹配\n");
} else {
printf("括号不匹配\n");
}
return 0;
}
```
阅读全文