#include<stdio.h>
#include<stdlib.h>
// Code by Titan 2020-03-16
// 定义堆栈结构
typedef struct Node *Position;
typedef Position Stack;
struct Node {
char ch;
Position next;
};
//定义初始化堆栈的操作
Stack initS() {
Stack S =(Stack)malloc(sizeof(struct Node));
S->next=NULL;
return S;
}
// 判断堆栈是否为空
int isEmpty(Stack S) {
if(S->next==NULL) {
return 1;
} else {
return 0;
}
}
// 定义压入堆栈的操作
void Push(char data,Stack S) {
Stack Temp = (Stack)malloc(sizeof(struct Node));
Temp->ch=data;
Temp->next = S->next;
S->next=Temp;
}
//定义删除栈顶节点并返回的操作
char Pop(Stack S) {
if(isEmpty(S)) {
return NULL;
} else {
Stack Temp=S->next;
char ch = Temp->ch;
S->next=Temp->next;
free(Temp);
return ch;
}
}
int main() {
char temp,get;
int flag=1; // 判断括号符是否匹配的标志
Stack S = initS(); // 初始化一个堆栈
// 下面是判断流程
while(scanf("%c",&temp),temp!='\n') {
if(temp!=']' && temp !=')') {
Push(temp,S);
} else if(temp == ')' ) {
get = Pop(S);
if(get !='(') {
flag=0;
break;
}
} else if(temp == ']' ) {
get = Pop(S);
if(get !='[') {
flag=0;
break;
}
}
}
// 只有当堆栈空以及Flag为1时,才能判断括号符匹配
if(flag && isEmpty(S)){
printf("括号符匹配!\n");
}else{
printf("括号符不匹配!\n");
}
}