括号匹配c语言
时间: 2023-07-02 13:23:24 浏览: 86
括号匹配C语言
下面是一个简单的括号匹配的 C 语言实现:
```c
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#define MAX_SIZE 100 // 栈的最大容量
struct Stack {
char data[MAX_SIZE];
int top;
};
void initStack(struct Stack *s) {
s->top = -1;
}
bool isEmpty(struct Stack *s) {
return (s->top == -1);
}
bool isFull(struct Stack *s) {
return (s->top == MAX_SIZE - 1);
}
void push(struct Stack *s, char c) {
if (isFull(s)) {
printf("Error: stack is full!\n");
exit(1);
}
s->data[++s->top] = c;
}
char pop(struct Stack *s) {
if (isEmpty(s)) {
printf("Error: stack is empty!\n");
exit(1);
}
return s->data[s->top--];
}
bool isValid(char *s) {
struct Stack stack;
initStack(&stack);
for (int i = 0; s[i] != '\0'; i++) {
switch (s[i]) {
case '(':
case '[':
case '{':
push(&stack, s[i]);
break;
case ')':
if (isEmpty(&stack) || pop(&stack) != '(') {
return false;
}
break;
case ']':
if (isEmpty(&stack) || pop(&stack) != '[') {
return false;
}
break;
case '}':
if (isEmpty(&stack) || pop(&stack) != '{') {
return false;
}
break;
}
}
return isEmpty(&stack);
}
int main() {
char s[MAX_SIZE];
printf("请输入一个括号序列:");
scanf("%s", s);
if (isValid(s)) {
printf("括号匹配成功!\n");
} else {
printf("括号匹配失败!\n");
}
return 0;
}
```
该程序使用了栈来检查输入的括号序列是否合法,时间复杂度为 O(n)。
阅读全文