括号配对问题1

Posted MintTremor

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了括号配对问题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. }  

以上是关于括号配对问题1的主要内容,如果未能解决你的问题,请参考以下文章

判断圆括号是不是配对用C语言如何实现

括号配对问题1

题目2-括号配对问题

求c语言高手,括号配对问题

括号配对问题-java:Stack

贪心算法(10):括号的平衡配对问题