括号配对检验(要求实现对括号优先级的检测)用栈实现,c语言
时间: 2024-10-25 12:13:16 浏览: 25
C语言括号匹配算法实现
括号配对检验通常是用于检查给定字符串中的括号(如()[]{})是否有效配对。在C语言中,可以使用栈数据结构来实现这个功能。下面是一个简单的步骤描述:
1. 创建一个空的栈(通常使用数组或链表实现),并初始化栈顶指针。
2. 遍历输入的字符串,对于每个字符,按照优先级判断它是否是开括号:
- 如果是左括号(例如'('、'['或'{'),将其压入栈中。
- 如果是右括号(例如')'、']'或'}'),检查栈顶元素是否匹配当前的右括号。如果不匹配,则返回错误,因为有未关闭的左括号。
- 如果匹配,从栈顶弹出一个左括号。
3. 当遍历完成后,如果栈为空,说明所有括号都已正确配对;否则,表示存在未关闭的左括号。
以下是C语言的一个简单示例代码,使用数组来代表栈:
```c
#include <stdio.h>
#include <stdbool.h>
#define MAX_STACK_SIZE 50
char stack[MAX_STACK_SIZE] = {0};
int top = -1;
bool isValid(char str[]) {
int i;
for (i = 0; str[i]; i++) {
switch (str[i]) {
case '(': case '[': case '{':
if (top == MAX_STACK_SIZE - 1) return false; // 栈满
stack[++top] = str[i];
break;
case ')': case ']': case '}':
if (top == -1 || stack[top] != '(' && stack[top] != '[' && stack[top] != '{') return false; // 匹配失败
if (stack[top] == str[i]) top--; // 匹配成功,移除栈顶的左括号
else return false; // 匹配错误
break;
default:
continue;
}
}
return top == -1; // 如果遍历结束,且栈为空,说明括号配对正确
}
int main() {
char test_cases[][10] = {"()", "([])", "{[()]}", "(]", "([)]", "{[(])"};
int num_tests = sizeof(test_cases) / sizeof(test_cases[0]);
for (int i = 0; i < num_tests; i++) {
bool result = isValid(test_cases[i]);
if (result) printf("%s: Valid\n", test_cases[i]);
else printf("%s: Invalid\n", test_cases[i]);
}
return 0;
}
```
阅读全文