#include <stdio.h> #include <stdbool.h> #include <stdlib.h> #include <string.h> #define MAX_SIZE 100000 typedef struct { char data[MAX_SIZE]; int top; } ArrayStack; //初始化 void initArrayStack(ArrayStack* stack) { stack->top = -1; } //判断栈是否为空 bool isEmpty(ArrayStack* stack) { return stack->top == -1; } //判断栈是否为满 bool isFull(ArrayStack* stack) { return stack->top == MAX_SIZE - 1; } //入栈 void push(ArrayStack* stack, char num) { if(isFull(stack)) { printf("Full\n"); return; } //stack->top++; //stack->data[stack->top] = num; stack->data[++stack->top] = num; } //出栈 void pop(ArrayStack* stack) { if(isEmpty(stack)) { printf("Empty\n"); return; } stack->top--; stack->data[stack->top]; } //获取栈顶元素 char query(ArrayStack* stack) { if(isEmpty(stack)) { printf("Empty\n"); return false; } return stack->data[stack->top]; } //获取栈的长度 int size(ArrayStack* stack) { return stack->top++; } //括号匹配 bool isBracketsBalanced(char* s) { //声明并初始化顺序栈 ArrayStack stack; initArrayStack(&stack); for(int i = 0; s[i] != '\0'; i++) { if(s[i] == '(' || s[i] == '[')//如果遇到左括号'(' '[',压入栈内 { push(&stack, s[i]); } else if(s[i] == ')' || s[i] == ']')//如果遇到右括号')' ']',检查栈顶元素是否与当前右括号匹配 { if(isEmpty(&stack))//栈为空或栈顶元素不匹配,返回false { return false; } char top_element = query(&stack); if((s[i] == ')' && top_element != '(')||(s[i] == ']' && top_element != '[')) { return false; } //如果匹配,弹出栈顶元素继续处理 pop(&stack); } } //最后检查整个栈是否为空,为空表示所有括号都匹配 return isEmpty(&stack); } int main() { char s[MAX_SIZE] ={'\0'}; scanf("%s",s); getchar(); if(isBracketsBalanced(s)) { printf("true\n"); } else { printf("false\n"); } return 0; }