括号配对问题1

  1. #include<stdio.h>  
  2. #include<stdlib.h>  
  3. #define Stack_size 10000  
  4. typedef struct{  
  5.     char elem[Stack_size];  
  6.     int top;  
  7. } SeqStack;   
  8. void InitStack (SeqStack *S) {  
  9.     S->top = -1;  
  10. }  
  11. int IsEmpty (SeqStack *S) {  
  12.     if (S->top == -1)  return 1;  
  13.     else  
  14.         return 0;  
  15. }  
  16. int Push (SeqStack *S,char x) {  
  17.     if(S->top == Stack_size-1)  return 0;  
  18.     S->top++;  
  19.     S->elem[S->top] = x;  
  20.     return 0;  
  21. }  
  22. int GetTop (SeqStack *S,char *x) {  
  23.     if (S->top == -1)  return 0;  
  24.     else {  
  25.         *x=S->elem[S->top];  
  26.         return 1;  
  27.     }  
  28. }  
  29. int Pop (SeqStack *S,char *x) {  
  30.     if (S->top == -1)  return 0;  
  31.     else {  
  32.         *x=S->elem[S->top];  
  33.         S->top--;  
  34.         return 0;  
  35.     }  
  36. }  
  37. int Match (char a,char b){  
  38.     if (a+1==b||a+2==b)  return 1;  
  39.     else   
  40.         return 0;  
  41. }  
  42. int BracketMatch (char *str){  
  43.     SeqStack S;int i;char ch;  
  44.     InitStack (&S);  
  45.     for (i=0; str[i]!='\0'; i++){  
  46.         switch (str[i]) {  
  47.             case '(':  
  48.             case '[':  
  49.             case '{':  
  50.                 Push (&S,str[i]);  
  51.                 break;  
  52.             case ')':  
  53.             case ']':  
  54.             case '}':  
  55.                 if (IsEmpty (&S) ){  
  56.                     printf("No\n");  
  57.                     return 0;  
  58.                 }  
  59.                 else {  
  60.                     GetTop (&S,&ch);  
  61.                     if (Match(ch,str[i]))  
  62.                         Pop (&S,&ch);  
  63.                     else{  
  64.                         printf("No\n");  
  65.                         return 0;  
  66.                     }  
  67.                 }  
  68.         }  
  69.     }  
  70.     if (IsEmpty (&S) )  
  71.         printf("Yes\n");  
  72.     else  
  73.         printf("No\n");  
  74.     return 0;  
  75. }  
  76. int main(){  
  77.     int n;  
  78.     char a[10000];  
  79.     scanf("%d",&n);  
  80.     while (n--){  
  81.         scanf("%s",a);  
  82.         BracketMatch (a);  
  83.     }  
  84.     return 0;  
  85. }  

posted on 2018-05-25 11:24  Mint-Tremor  阅读(248)  评论(0编辑  收藏  举报

导航