返回首页 一起talk C栗子吧

一起talk C栗子吧(第二十回:C语言实例--括号匹配)

各位看官们,大家好,前几回中咱们说了堆栈的原理,并且举了实际的例子进行解说,这一回咱们说的例 子是:括号匹配。括号匹配使用了堆栈的原理,大家可以从例子看出来,所以我们把它们放在一起。闲话 休提,言归正转。让我们一起talk C栗子吧!

看官们,所谓的括号匹配,就是给了一连串括号,里面有各种类型的的括号,然后确定该串中的括号是否 是一一 匹配的。例如:({[]})这串括号中的括号就是匹配的。因为串中的括号都是成对出现。(({)这串括号就 不是匹配的,串中{没有与它配对的括号,而且与(匹配的括号数量也不正确。

在确认括号是否匹配的过程中,我们的思路是这样的:首先依次从串中读取括号,每次读取一个括号,如 果读取的括号是左括号,比如(,{,[,那么就让括号入栈,如果读取的是右括号,比如),},],那么就把栈顶的 括号取出来,和它匹配,如果匹配,就继续进行判断串中的下一个括号,如果不匹配,那么就说明该串中 的括号不匹配。

看官们,详细的代码如下,请大家参考:

     1  /* **************************
     2   * For ParenthesisMatching
     3   * *************************/
     4  
     5  #include<stdio.h>
     6  
     7  #define SIZE 10
     8  
     9  char array[SIZE]; //using the array for stack
    10  typedef struct _Stack
    11  {
    12      char *top;
    13      int size;
    14  }Stack;
    15  
    16  int push(Stack *s,char ch)
    17  {
    18      if(NULL == s)
    19          return 0;
    20  
    21      if(s->size < SIZE)
    22      {
    23          *(s->top) = ch;
    24          s->top++;
    25          s->size++;
    26  
    27          return 1;
    28      }
    29      else
    30          return 0;
    31  }
    32  
    33  int pop(Stack *s, char *ch)
    34  {
    35      if(NULL == s)
    36          return 0;
    37  
    38      if(s->size > 0)
    39      {
    40          s->top--;
    41          s->size--;
    42          *ch = *(s->top);
    43  
    44          return 1;
    45      }
    46      else
    47          return 0;
    48  }
    49  
    50  int main()
    51  {
    52      char parenthesis[SIZE]={'(','{','[',']','}',')','[','{','}',']'}; // parenthesis ,you can init it by your self
    53      int i;
    54      int result;
    55      char ch;
    56      Stack s ; // stack defination and init
    57      s.top = &array[0];
    58      s.size =0;
    59  
    60      result =0;
    61      for(i=0; i<SIZE; ++i)
    62      {
    63          ch = parenthesis[i];
    64  
    65          switch(ch)
    66          {
    67              case '(':
    68              case '{':
    69              case '[':
    70                  if(!push(&s,ch) )
    71                      return 0;
    72                  break;
    73              case ')':
    74                  if(!pop(&s,&ch))
    75                      return 0;
    76  
    77                  if( ch != '(')
    78                  {
    79                      result = 1;
    80                  }
    81                  break;
    82              case '}':
    83                  if(!pop(&s,&ch))
    84                      return 0;
    85  
    86                  if( ch != '{')
    87                  {
    88                      result = 1;
    89                  }
    90                  break;
    91              case ']':
    92                  if(!pop(&s,&ch))
    93                      return 0;
    94  
    95                  if( ch != '[')
    96                  {
    97                      result = 1;
    98                  }
    99                  break;
   100              default:
   101                  break;
   102          }
   103  
   104          if(1 == result)
   105          {
   106              printf("Parenthesis is not matching \n");
   107              break;
   108          }
   109      }
   110  
   111      if(0 == result)
   112      {
   113          printf("Parenthesis is matching \n");
   114      }
   115  
   116      return 0;
   117  }

各位看官,关于括号匹配的例子咱们就说到这里。欲知后面还有什么例子,且听下回分解。