C语言实现括号匹配代码
时间: 2024-06-17 14:02:52 浏览: 262
C语言实现括号匹配代码的实现通常需要使用栈这种数据结构来完成。具体的实现步骤如下:
1. 遍历字符串,如果遇到左括号(包括小括号、中括号、大括号),则将其入栈。
2. 如果遇到右括号,则取出栈顶元素,与当前的右括号进行匹配。如果匹配成功,则继续遍历;如果匹配失败,则说明括号不匹配,返回错误。
3. 遍历完字符串后,如果栈为空,则说明所有的括号都匹配成功;否则说明还有未匹配的括号,返回错误。
下面是一个简单的C语言实现括号匹配代码示例:
```
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct node {
char data;
struct node *next;
} Node;
typedef struct stack {
Node *top;
} Stack;
Stack *initStack() {
Stack *s = (Stack *)malloc(sizeof(Stack));
s->top = NULL;
return s;
}
int isEmpty(Stack *s) {
return s->top == NULL;
}
void push(Stack *s, char c) {
Node *node = (Node *)malloc(sizeof(Node));
node->data = c;
node->next = s->top;
s->top = node;
}
char pop(Stack *s) {
if (isEmpty(s)) {
return '\0';
}
Node *node = s->top;
char c = node->data;
s->top = node->next;
free(node);
return c;
}
char peek(Stack *s) {
if (isEmpty(s)) {
return '\0';
}
return s->top->data;
}
int match(char a, char b) {
return (a == '(' && b == ')') || (a == '[' && b == ']') || (a == '{' && b == '}');
}
int isValid(char *s) {
int len = strlen(s);
Stack *stack = initStack();
for (int i = 0; i < len; i++) {
char c = s[i];
if (c == '(' || c == '[' || c == '{') {
push(stack, c);
} else if (c == ')' || c == ']' || c == '}') {
char top = peek(stack);
if (isEmpty(stack) || !match(top, c)) {
return 0;
}
pop(stack);
}
}
int result = isEmpty(stack);
free(stack);
return result;
}
int main() {
char s[100];
scanf("%s", s);
if (isValid(s)) {
printf("Valid\n");
} else {
printf("Invalid\n");
}
return 0;
}
```
阅读全文
相关推荐
















