括号匹配

#include<stdio.h>
#include<stdlib.h>
struct stack
{
 char *base;
 char *top;
};
int initstack(stack *h)
{
 h->base=(char *)malloc(sizeof(char));
 h->top=h->base;
 return 1;
}
int crestack(stack *h,char e)
{
 *h->top++=e;
 return 1;
}
char gettop(stack *h)
{
 return *(h->top-1);
}
int destory(stack *h)
{
 --h->top;
}
int redes(stack *h)
{
 h->top=h->base;
 free(h->base);
}
int main()
{
 stack *h;
 initstack(h);
 char c;
 while(scanf("%c",&c))
 {
   while(c!='#')
  {
   if(NULL==h)
   {
    crestack(h,c);
   }
   else
   {
    char r=gettop(h);
    if(r=='['&&r==c-2||r=='('&&r==c-1) destory(h);
    else crestack(h,c);
   }
   scanf("%c",&c);
  }
  if(h->base==h->top) printf("yes\n");
  else   printf("no\n");
  redes(h);
 }
}

posted @ 2015-10-19 23:04  jarrem  阅读(112)  评论(0)    收藏  举报