数据结构实验之栈与队列四:括号匹配
Time Limit: 1000 ms Memory Limit: 65536 KiB
Submit Statistic
Problem Description
给你一串字符,不超过50个字符,可能包括括号、数字、字母、标点符号、空格,你的任务是检查这一串字符中的( ) ,[ ],{ }是否匹配。
Input
输入数据有多组,处理到文件结束。
Output
如果匹配就输出“yes”,不匹配输出“no”
Sample Input
sin(20+10)
{[}]
Sample Output
yes
no
#include <bits/stdc++.h>
using namespace std;
#define Stacksize 100
#define add 10
typedef struct
{
int *baes;
int *top;
int stacksize;
}Sqstack;
void Initstack(Sqstack &s)
{
s.baes = (int *)malloc(Stacksize*sizeof(int));
if(!s.baes)exit(0);
s.top = s.baes;
s.stacksize = Stacksize;
}
int Gettop(Sqstack &s)
{
return *(s.top - 1);
}
void Push(Sqstack &s, int e)
{
if(s.top - s.baes >= s.stacksize)
{
s.baes = (int *)realloc(s.baes, Stacksize*sizeof(int));
if(!s.baes)exit(0);
s.top = s.baes + s.stacksize;
s.stacksize += Stacksize;
}
*s.top++ = e;
}
int Pop(Sqstack &s)
{
int e = *(--s.top);
return e;
}
int isempty(Sqstack &s)
{
if(s.baes == s.top)
return 1;
else
return 0;
}
int main()
{
char s[80];
int e;
while(gets(s))
{
Sqstack z;
Initstack(z);
int i;
int flag=1;
for(i=0;s[i]!='\0';i++)
{
if(s[i]=='('||s[i]=='{'||s[i]=='[')
Push(z,s[i]);
else if(s[i]==')')
{
if(isempty(z))
{
flag=0;
break;
}
else
{
e = Pop(z);
if(e!='(')
{
flag=0;
break;
}
}
}
else if(s[i]=='}')
{
if(isempty(z))
{
flag=0;
break;
}
else
{
e = Pop(z);
if(e!='{')
{
flag=0;
break;
}
}
}
else if(s[i]==']')
{
if(isempty(z))
{
flag=0;
break;
}
else
{
e = Pop(z);
if(e!='[')
{
flag=0;
break;
}
}
}
}
if(!isempty(z))
{
flag=0;
}
if(flag)
printf("yes\n");
else
printf("no\n");
}
return 0;
}