试编写C程序,利用栈结构解决以下应用问题。 输入一串括号包含以下括号种类:(、)、[、]、{、}。试利用顺序栈或链栈检查输入括号序列的匹配情况;
时间: 2024-10-11 11:09:56 浏览: 19
括号匹配问题
为了编写一个C程序,我们首先需要明确算法步骤。这里是一个简单的示例,我们将使用顺序栈(数组实现)来检查括号序列是否匹配:
```c
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#define MAX_STACK_SIZE 100
char stack[MAX_STACK_SIZE];
int top = -1;
bool is_valid(char brackets[], int n) {
stack[top + 1] = '\0'; // 初始化栈顶元素为结束标记
for (int i = 0; i < n; ++i) {
if (brackets[i] == '(' || brackets[i] == '[' || brackets[i] == '{') {
stack[++top] = brackets[i]; // 入栈左括号
} else if (stack[top] != '\0' && stack[top] == ')' && brackets[i] == '(' ||
stack[top] != '\0' && stack[top] == ']' && brackets[i] == '[' ||
stack[top] != '\0' && stack[top] == '{' && brackets[i] == '}') {
stack[top--] = '\0'; // 匹配成功,出栈
} else {
return false; // 匹配失败,直接返回
}
}
return stack[top] == '\0'; // 如果栈为空,则表示所有括号都已匹配
}
int main() {
char brackets[] = "({[})"; // 测试字符串
int n = sizeof(brackets) / sizeof(brackets[0]);
if (is_valid(brackets, n)) {
printf("括号序列匹配有效.\n");
} else {
printf("括号序列不匹配有效.\n");
}
return 0;
}
```
在这个程序中,`is_valid()` 函数遍历给定的括号序列,遇到左括号就入栈,遇到右括号则尝试与栈顶的左括号匹配。如果找到匹配对,栈顶的左括号出栈。如果在整个过程中没有遇到未匹配的右括号,那么最终栈顶应该为空,表示括号序列是有效的。
阅读全文