/*括号匹配算法*/#include#define FALSE 0#define TRUE 1#define MAXSIZE 100typedef char DataType;//定义栈typedef struct stack{ DataType data[MAXSIZE]; int top;}SeqStack;//初始化栈void InitStack(SeqStack *s){ s->top = -1;}//判断栈是否为空int IsEmpty(SeqStack *s){ if(s->top == -1) return TRUE; return FALSE;}//判断栈是否已满int IsFull(SeqStack *s){ if(s->top == MAXSIZE-1) return TRUE; return FALSE;}//出栈void PopStack(SeqStack *s, DataType temp){ if(IsEmpty(s)) return; temp = s->data[s->top]; s->top --;}//压栈void PushStack(SeqStack *s,DataType temp){ if(IsFull(s)) return; s->top ++ ; s->data[s->top]=temp;}//判断两个括号是否匹配int Match(char chone,char chtwo){ if(chone=='(' && chtwo==')') return TRUE; else if(chone == '{' && chtwo == '}') return TRUE; else if(chone == '[' && chtwo == ']') return TRUE; else return FALSE;}//取栈顶元素void GetTopStack(SeqStack *s , DataType *temp){ if(IsEmpty(s)) return; *temp = s->data[s->top];}void BracketMatch(char *str){ SeqStack s; int i; char ch; InitStack(&s); for(i=0 ; str[i]!='\0';i++ ) { switch(str[i]){ case '(': case '[': case '{': PushStack(&s,str[i]); break; case ')': case ']': case '}': if(IsEmpty(&s)) { printf("右括号多余\n"); return; }else{ GetTopStack(&s,&ch); if(Match(ch,str[i])) PopStack(&s,ch); else{ printf("\n对应的右括号不同类\n"); return; }/*if*/ }/*else*/ }/*for*/ }/*switch*/ if(IsEmpty(&s)) printf("\n括号匹配\n"); else printf("\n左括号多余\n");}int main(){ char str[MAXSIZE]; int i; printf("Input the bracket string: \n"); scanf("%s",str); BracketMatch(str); return 1;}