C语言括号匹配检查算法:高效判断字符串括号配对
以下是使用C语言编写的解答:
#include <stdio.h>
#include <stdlib.h>
#define MAX_LENGTH 100
typedef struct {
char* data;
int top;
} Stack;
Stack* createStack() {
Stack* stack = (Stack*)malloc(sizeof(Stack));
stack->data = (char*)malloc(MAX_LENGTH * sizeof(char));
stack->top = -1;
return stack;
}
void push(Stack* stack, char c) {
stack->top++;
stack->data[stack->top] = c;
}
char pop(Stack* stack) {
char c = stack->data[stack->top];
stack->top--;
return c;
}
int isEmpty(Stack* stack) {
return stack->top == -1;
}
int isMatch(char open, char close) {
if (open == '(' && close == ')') {
return 1;
} else if (open == '[' && close == ']') {
return 1;
} else if (open == '{' && close == '}') {
return 1;
}
return 0;
}
int checkBracketMatching(char* str) {
Stack* stack = createStack();
for (int i = 0; str[i] != '\0'; i++) {
char c = str[i];
if (c == '(' || c == '[' || c == '{') {
push(stack, c);
} else if (c == ')' || c == ']' || c == '}') {
if (isEmpty(stack) || !isMatch(stack->data[stack->top], c)) {
return 0;
} else {
pop(stack);
}
}
}
int result = isEmpty(stack);
free(stack->data);
free(stack);
return result;
}
int main() {
char str[MAX_LENGTH];
scanf('%[^
]', str);
if (checkBracketMatching(str)) {
printf('yes\n');
} else {
printf('no\n');
}
return 0;
}
这个程序使用栈的数据结构来检查给定字符串中的括号是否匹配。首先,创建一个栈,并定义了栈的相关操作函数(createStack、push、pop、isEmpty)。然后,遍历给定字符串的每个字符,如果是左括号,则将其压入栈中;如果是右括号,则与栈顶的左括号进行匹配,如果匹配成功,则弹出栈顶的左括号,否则返回0。最后,检查栈是否为空,如果为空,则返回1,表示括号匹配成功;否则返回0,表示括号不匹配。
原文地址: https://www.cveoy.top/t/topic/cGNZ 著作权归作者所有。请勿转载和采集!