#include <bits/stdc++.h>
#define maxsize 10000
#define addsize 10
#define true 1
#define false 0
typedef int elemtype;
typedef struct
{
elemtype *base;
elemtype *top;
int stacksize;
}sqstack;
int initstack(sqstack &s)
{
s.base=new int[maxsize];
if(!s.base)
{
return false;
}
s.top=s.base;
s.stacksize = maxsize;
return 0;
}
void push(sqstack &s,int x)
{
if(s.top-s.base>=s.stacksize)
{
s.base=new int[maxsize+addsize];
/*if(!s.base)
{
return -1;
}*/
s.top=s.base+addsize;
s.stacksize+=addsize;
}
*s.top++=x;
}
int pop(sqstack &s)
{
if(s.top==s.base)
{
return false;
}
int x;
x=*--s.top;
return x;
}
int fullstack(sqstack &s)
{
if(s.top-s.base<s.stacksize)
{
return false;
}
else
{
return true;
}
}
int isempty(sqstack &s)
{
if(s.top==s.base)
{
return true;
}
else
{
return false;
}
}
int gettop(sqstack &s)
{
if(s.top==s.base)
{
return false;
}
return *(s.top-1);
}
int bb(char n)
{
int flag;
if(n=='(') flag = 1;
if(n=='[') flag = 2;
if(n=='{') flag = 3;
if(n==')') flag = 1;
if(n==']') flag = 2;
if(n=='}') flag = 3;
return flag;
}
int main()
{
sqstack s;
int flag;
char a[55];
int len;
int i;
int k;
while(gets(a)) // **包含空格用gets 无空格用 %s**
{
flag=1;
initstack(s);
len=strlen(a);
for(i=0;i<len;i++)
{
if(a[i]=='{'||a[i]=='['||a[i]=='(')
{
push(s,bb(a[i]));
}
else if(a[i]=='}'||a[i]==']'||a[i]==')')
{
k=bb(a[i]);
if(isempty(s))
{
flag=0;
break;
}
else
{
if(k!=pop(s))
{
flag=0;
break;
}
}
}
}
if(!isempty(s))
{
flag=0;
}
if(flag==1)
{
printf("yes\n");
}
else
{
printf("no\n");
}
}
return 0;
}
括号匹配
最新推荐文章于 2024-09-22 10:16:35 发布