鍍金池/ 教程/ C/ 一起talk C栗子吧(第二十回:C語言實(shí)例--括號(hào)匹配)
一起talk C栗子吧(第八回:C語言實(shí)例--素?cái)?shù))
一起talk C栗子吧(第十八回:C語言實(shí)例--輸出十六進(jìn)制)
一起talk C栗子吧(第十七回:C語言實(shí)例--棧二)
一起talk C栗子吧(第十九回:C語言實(shí)例--位操作)
一起talk C栗子吧(第十六回:C語言實(shí)例--棧一)
一起talk C栗子吧(第五回:C語言實(shí)例--數(shù)組巧妙賦值)
一起talk C栗子吧(第十二回:C語言實(shí)例--單鏈表一)
一起talk C栗子吧(第九回:C語言實(shí)例--最大公約數(shù))
一起talk C栗子吧(第二回:C語言實(shí)例--判斷閏年)
一起talk C栗子吧(第六回:C語言實(shí)例--生成隨機(jī)數(shù))
一起talk C栗子吧(第四回:C語言實(shí)例--斐波那契數(shù)列)
一起talk C栗子吧(第十四回:C語言實(shí)例--循環(huán)鏈表)
一起talk C栗子吧(第十五回:C語言實(shí)例--雙向鏈表)
一起talk C栗子吧(第二十一回:C語言實(shí)例--表達(dá)式求值)
一起talk C栗子吧(第三回:C語言實(shí)例--求階乘)
一起talk C栗子吧(第七回:C語言實(shí)例--進(jìn)制轉(zhuǎn)換)
一起talk C栗子吧(第二十回:C語言實(shí)例--括號(hào)匹配)
一起talk C栗子吧(第一回:C語言實(shí)例概述)
一起talk C栗子吧(第十回:C語言實(shí)例--最小公倍數(shù))
一起talk C栗子吧(第十一回:C語言實(shí)例--文件組織結(jié)構(gòu))
一起talk C栗子吧(第十三回:C語言實(shí)例--單鏈表二)

一起talk C栗子吧(第二十回:C語言實(shí)例--括號(hào)匹配)

各位看官們,大家好,前幾回中咱們說了堆棧的原理,并且舉了實(shí)際的例子進(jìn)行解說,這一回咱們說的例 子是:括號(hào)匹配。括號(hào)匹配使用了堆棧的原理,大家可以從例子看出來,所以我們把它們放在一起。閑話 休提,言歸正轉(zhuǎn)。讓我們一起talk C栗子吧!

看官們,所謂的括號(hào)匹配,就是給了一連串括號(hào),里面有各種類型的的括號(hào),然后確定該串中的括號(hào)是否 是一一 匹配的。例如:({[]})這串括號(hào)中的括號(hào)就是匹配的。因?yàn)榇械睦ㄌ?hào)都是成對(duì)出現(xiàn)。(({)這串括號(hào)就 不是匹配的,串中{沒有與它配對(duì)的括號(hào),而且與(匹配的括號(hào)數(shù)量也不正確。

在確認(rèn)括號(hào)是否匹配的過程中,我們的思路是這樣的:首先依次從串中讀取括號(hào),每次讀取一個(gè)括號(hào),如 果讀取的括號(hào)是左括號(hào),比如(,{,[,那么就讓括號(hào)入棧,如果讀取的是右括號(hào),比如),},],那么就把棧頂?shù)?括號(hào)取出來,和它匹配,如果匹配,就繼續(xù)進(jìn)行判斷串中的下一個(gè)括號(hào),如果不匹配,那么就說明該串中 的括號(hào)不匹配。

看官們,詳細(xì)的代碼如下,請(qǐng)大家參考:

     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  }

各位看官,關(guān)于括號(hào)匹配的例子咱們就說到這里。欲知后面還有什么例子,且聽下回分解。