刮号判断
来源:互联网 发布:安卓应用市场网站源码 编辑:程序博客网 时间:2024/04/27 15:08
/****************************************************************--程序描述:输入不同刮号,判断是否匹配--修改原因:从前代码写不够规范--修改日期: 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");}