编程题,括号匹配[利用栈]
时间: 2024-10-25 21:04:24 浏览: 11
编程中的括号匹配(也称为括号平衡检查)是一项常见的算法练习,通常使用栈数据结构来解决。这个题目要求判断给定的一串字符(通常是圆括号、方括号或花括号)是否有效,即所有的开始括号都有相应的结束括号,并且它们的配对顺序正确。
这里是一个简单的C语言示例,用栈来解决这个问题:
```c
#include <stdbool.h>
#include <stdio.h>
#include <stdlib.h>
#define MAX_STACK_SIZE 100
typedef struct {
char stack[MAX_STACK_SIZE];
int top;
} Stack;
bool isMatching(char open, char close) {
if (open == '(' && close == ')') return true;
else if (open == '[' && close == ']') return true;
else if (open == '{' && close == '}') return true;
else return false; // 不匹配的括号类型
}
bool isValidString(char str[]) {
Stack s;
s.top = -1;
for (int i = 0; str[i]; i++) {
char c = str[i];
if (c == '(' || c == '[' || c == '{') { // 开始括号入栈
s.stack[++s.top] = c;
} else if (c == ')' || c == ']' || c == '}') { // 结束括号
if (s.top == -1) return false; // 如果栈为空,不匹配
char top = s.stack[s.top--]; // 弹出栈顶元素
if (!isMatching(top, c)) { // 检查是否匹配
return false;
}
}
}
return s.top == -1; // 如果所有括号都已处理并且栈空,则返回true
}
int main() {
char input[] = "{[(])}";
bool result = isValidString(input);
if (result)
printf("括号匹配有效");
else
printf("括号匹配无效");
return 0;
}
```
在这个程序中,`isValidString` 函数遍历字符串,每当遇到开始括号时就将其推入栈中,遇到结束括号则检查栈顶的开始括号是否与其匹配。如果在整个过程中栈始终保持为空,或者遍历结束后栈非空,说明括号没有完全匹配,返回`false`。
阅读全文