用C语言数据结构写程序输入括号的检验
时间: 2023-05-25 22:07:06 浏览: 93
以下是一个使用栈的例子:
```c
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#define STACK_SIZE 100
char stack[STACK_SIZE];
int top = -1;
void push(char c) {
if (top == STACK_SIZE - 1) {
printf("栈已满!\n");
exit(1);
}
stack[++top] = c;
}
char pop() {
if (top == -1) {
printf("栈已空!\n");
exit(1);
}
return stack[top--];
}
bool is_matching_pair(char left, char right) {
if (left == '(' && right == ')') {
return true;
}
if (left == '{' && right == '}') {
return true;
}
if (left == '[' && right == ']') {
return true;
}
return false;
}
bool check_parentheses(char* input) {
for (int i = 0; input[i] != '\0'; i++) {
if (input[i] == '(' || input[i] == '{' || input[i] == '[') {
push(input[i]);
}
if (input[i] == ')' || input[i] == '}' || input[i] == ']') {
char left = pop();
char right = input[i];
if (!is_matching_pair(left, right)) {
return false;
}
}
}
if (top != -1) {
return false;
}
return true;
}
int main() {
char input[STACK_SIZE];
printf("请输入括号序列:");
scanf("%s", input);
if (check_parentheses(input)) {
printf("括号匹配!\n");
} else {
printf("括号不匹配!\n");
}
return 0;
}
```
程序读取一个字符串,然后逐个字符处理。如果字符是左括号,则把它压入栈中;如果是右括号,则从栈中取出一个左括号进行匹配。如果匹配成功,则继续处理下一个字符;如果匹配失败,则说明括号不匹配。当处理完全部字符后,如果栈中还有元素,则说明缺少右括号,也算是括号不匹配的情况。函数 is_matching_pair 用于判断左右括号是否匹配。可以看到,使用栈可以很方便地解决这个问题。
阅读全文