请用c语言给我写一个检验括号是否匹配的数据结构代码
时间: 2023-05-25 20:03:50 浏览: 91
以下是一个简单的使用栈(stack)数据结构来检验括号是否匹配的代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#define STACK_SIZE 100
// 栈结构体
typedef struct {
int top;
char items[STACK_SIZE];
} Stack;
// 初始化栈
void init_stack(Stack* stack) {
stack->top = -1;
}
// 判断栈是否为空
bool is_empty(Stack* stack) {
return stack->top < 0;
}
// 判断栈是否已满
bool is_full(Stack* stack) {
return stack->top >= STACK_SIZE - 1;
}
// 入栈
void push(Stack* stack, char item) {
if (is_full(stack)) {
printf("Error: Stack overflow\n");
exit(EXIT_FAILURE);
}
stack->items[++stack->top] = item;
}
// 出栈
char pop(Stack* stack) {
if (is_empty(stack)) {
printf("Error: Stack underflow\n");
exit(EXIT_FAILURE);
}
return stack->items[stack->top--];
}
// 检测括号是否匹配
bool check_matching(char str[]) {
Stack stack;
init_stack(&stack);
int i = 0;
char ch;
while (str[i] != '\0') {
ch = str[i];
switch (ch) {
case '[':
case '{':
case '(':
push(&stack, ch); // 左括号入栈
break;
case ']':
if (is_empty(&stack) || pop(&stack) != '[') {
return false; // 右括号不匹配
}
break;
case '}':
if (is_empty(&stack) || pop(&stack) != '{') {
return false;
}
break;
case ')':
if (is_empty(&stack) || pop(&stack) != '(') {
return false;
}
break;
}
i++;
}
return is_empty(&stack); // 栈为空则匹配
}
int main() {
char str[STACK_SIZE];
printf("Enter an expression: ");
fgets(str, sizeof(str), stdin);
if (check_matching(str)) {
printf("Parentheses are balanced\n");
} else {
printf("Parentheses are not balanced\n");
}
return 0;
}
```
使用示例:
```
Enter an expression: [(a+b)*c/{d-e}]
Parentheses are balanced
```
```
Enter an expression: [(a+b)*c/{d-e}
Parentheses are not balanced
```
阅读全文