括号匹配M

  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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值