/**************************************************************** --程序描述: 输入不同刮号,判断是否匹配 --修改原因: 从前代码写不够规范 --修改日期: 2009.5.29 --修改人: 吴强 --编辑工具and语言 Turbo C for Windows , C语言 --输入要求: 只可输入 {, [, (, ), ], } 6种符号,并以空格表示结束 ***********************************************************************/ #include #include #include typedef struct node { char date; struct node *next; }Node; Node *Push(Node *s, char c) { Node *r; if (s == NULL) { r= (Node *)malloc( sizeof(Node) ); r->date= c; r->next= NULL; s= r; return s; } else { r=(Node *)malloc( sizeof(Node) ); r->date= c; r->next= s; s= r; return s; } } Node *Pop(Node *s) { Node *p; Node *q; if (s == NULL) { printf("Stack kong"); exit(0); } else { p= s; s= s->next; q=(Node *)malloc( sizeof(Node) ); q->date= p->date; q->next= s; free(p); return q; } } int StackEmpty(Node *s) { if (s == NULL) { return 1; } else { return 0; } } main() { Node *stack; Node *stackRight; Node *StackAllTop; Node *StackRightTop; char c; stack= NULL; stackRight= NULL; c= getchar(); while (c != ' ') { stack= Push(stack,c); c= getchar(); } while ( !StackEmpty(stack) ) { StackAllTop= Pop(stack); stack= StackAllTop->next; if ( StackAllTop->date == '}' || StackAllTop->date == ']' || StackAllTop->date == ')' ) { stackRight=Push(stackRight,StackAllTop->date); } else if ( StackAllTop->date == '{' || StackAllTop->date == '[' || StackAllTop->date == '(' ) { if ( stackRight == NULL ) { printf("result error!!!/n"); exit(0); } StackRightTop= Pop(stackRight); stackRight= StackRightTop->next; if ( StackAllTop->date == '(' ) { //判断是否匹配,StackAllTop->date+1 就是 ')' if ( StackAllTop->date+1 != StackRightTop->date ) { printf("result error!/n"); exit(0); } } else if ( StackAllTop->date == '[' || StackAllTop->date == '{' ) { //StackAllTop->date+1 就是 ']'或'}' if ( StackAllTop->date+2 != StackRightTop->date ) { printf("result error! /n"); exit(0); } } } //end elseif } //end while printf("result correct! /n"); }