您的位置:首页 > 其它

括号匹配

2014-09-25 09:56 531 查看
#include<stdio.h>
#include<stdlib.h>
#include<ctype.h>
#define STACK_INIT_SIZE 20
#define STACKINCREMENT 10

typedef struct{
char *top;
char *base;
int stacksize;
}sqStack;

void StackInit(sqStack *s)
{
s->base=(char*)malloc(sizeof(char)*STACK_INIT_SIZE);
if(!s->base)
exit(0);
s->top=s->base;
s->stacksize=STACK_INIT_SIZE;
}
void Push(sqStack *s,char e)      //push in
{
if(s->top-s->base>=s->stacksize)
{
s->base=(char*)realloc(s->base,(s->stacksize+STACKINCREMENT)*sizeof(char));
if(!s->base)
exit(0);
s->top=s->base+s->stacksize;
s->stacksize=s->stacksize+STACKINCREMENT;
}
*(s->top)=e;
s->top++;
}
void Pop(sqStack *s,char *e)//pop out
{
if(s->base==s->top)return;
*e=*--(s->top);
}
int StackLen(sqStack s)
{
return (s.top-s.base);
}
int match(char c,char e)
{
if((c=='['&&e==']')||(c=='{'&&e=='}'))
return 0;
else
return 1;
}
void Print(sqStack s)
{

}
void main()
{
sqStack s;
StackInit(&s);
char c;
char e;
scanf_s("%c",&c,1);
while (c!='#')
{
if(!StackLen(s))
Push(&s,c);
else
{
Pop(&s,&e);
printf("----%c-----\n",e);
if(!match(c,e))
{
Push(&s,e);
Push(&s,c);
}
else
{
printf("----match-----\n");
}
}
Print(s);
printf("SIZE:%d\n",StackLen(s));
scanf_s("%c",&c,1);
}
if(!StackLen(s))
printf("YES!\n");
else
printf("NO!\n");

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  括号