1 #include<stdio.h> 2 #include<stdlib.h> 3 #include<string.h> 4 #define Stack_Size 100 5 #define Stackincrement 10 6 #define ok 1 7 #define error 0 8 #define overflow 2 9 #define true 1 10 #define false 0 11 typedef int status; 12 typedef struct 13 { 14 char *base; 15 char *top; 16 int stacksize; 17 }SqStack; 18 status InitStack(SqStack &S) 19 { 20 S.base=(char *)malloc(Stack_Size*sizeof(char)); 21 if(!S.base) exit(overflow); 22 S.top=S.base; 23 S.stacksize=Stack_Size; 24 return ok; 25 } 26 status StackEmpty(SqStack &S) 27 { 28 if(S.top==S.base) 29 return true; 30 else 31 return false; 32 } 33 status GetTop(SqStack S,char &e) 34 { 35 if(S.top==S.base) return error; 36 e=*(S.top-1); 37 return ok; 38 } 39 status Push(SqStack &S,char e) 40 { 41 if((S.top-S.base)==S.stacksize) 42 { 43 S.base=(char *)realloc(S.base,(S.stacksize+Stackincrement)*sizeof(char)); 44 if(!S.base) exit(overflow); 45 S.top=S.base+S.stacksize; 46 S.stacksize+=Stackincrement; 47 } 48 *S.top++=e; 49 return ok; 50 } 51 status Pop(SqStack &S,char &e) 52 { 53 if(S.top==S.base) return error; 54 e=*--S.top; 55 return ok; 56 } 57 status match(char *array) 58 { 59 int i,length,state; 60 SqStack s; 61 char temp; 62 state=1;i=0;length=strlen(array); 63 InitStack(s); 64 while(i<length&&state) 65 { 66 switch(array[i]) 67 { 68 case '(': 69 case '[': 70 { 71 Push(s,array[i]);break; 72 } 73 case ')': 74 { 75 GetTop(s,temp); 76 if(!StackEmpty(s)&&temp=='(') 77 Pop(s,temp); 78 else state=0; 79 break; 80 } 81 case ']': 82 { 83 GetTop(s,temp); 84 if(!StackEmpty(s)&&temp=='[') 85 Pop(s,temp); 86 else state=0; 87 break; 88 } 89 } 90 i++; 91 } 92 if(StackEmpty(s)&&state) 93 return ok; 94 else 95 return error; 96 } 97 int main() 98 { 99 int n; 100 char s[10000]; 101 scanf("%d",&n); 102 getchar(); 103 while(n--) 104 { 105 gets(s); 106 if(match(s)) 107 puts("Yes"); 108 else 109 puts("No"); 110 } 111 return 0; 112 }
转载于:https://www.cnblogs.com/mycapple/archive/2012/08/03/2620927.html