设一个算法表达式中包含圆括号,方括号,和花括号三种类型的括号,用c语音编写一个算法判断其中的括号是否匹配
时间: 2024-02-17 08:01:33 浏览: 72
好的,以下是一个用 C 语言编写的算法,可以判断一个包含圆括号,方括号和花括号三种类型括号的算法表达式中的括号是否匹配:
```c
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#include <string.h>
#define MAX_SIZE 100
// 定义栈结构体
typedef struct {
char data[MAX_SIZE]; // 栈的数据
int top; // 栈顶指针
} Stack;
// 初始化栈
void init(Stack *s) {
s->top = -1;
}
// 判断栈是否为空
bool is_empty(Stack *s) {
return s->top == -1;
}
// 判断栈是否已满
bool is_full(Stack *s) {
return s->top == MAX_SIZE - 1;
}
// 入栈
bool push(Stack *s, char c) {
if (is_full(s)) {
return false;
}
s->data[++s->top] = c;
return true;
}
// 出栈
bool pop(Stack *s) {
if (is_empty(s)) {
return false;
}
s->top--;
return true;
}
// 获取栈顶元素
char top(Stack *s) {
return s->data[s->top];
}
// 判断括号是否匹配
bool is_matched(char left, char right) {
if (left == '(' && right == ')') {
return true;
}
if (left == '[' && right == ']') {
return true;
}
if (left == '{' && right == '}') {
return true;
}
return false;
}
// 判断算法表达式中的括号是否匹配
bool is_expression_matched(char expression[]) {
Stack s;
init(&s);
int len = strlen(expression);
for (int i = 0; i < len; i++) {
char c = expression[i];
if (c == '(' || c == '[' || c == '{') {
push(&s, c);
} else if (c == ')' || c == ']' || c == '}') {
if (is_empty(&s) || !is_matched(top(&s), c)) {
return false;
} else {
pop(&s);
}
}
}
return is_empty(&s);
}
// 测试
int main() {
char expression[MAX_SIZE];
printf("请输入算法表达式:");
scanf("%s", expression);
if (is_expression_matched(expression)) {
printf("括号匹配\n");
} else {
printf("括号不匹配\n");
}
return 0;
}
```
运行程序后,您可以输入一个算法表达式,程序会输出括号是否匹配的结果。
阅读全文