数据结构实验之栈四:括号匹配
Time Limit: 1000MS Memory limit: 65536K
题目描述
给你一串字符,不超过50个字符,可能包括括号、数字、字母、标点符号、空格,你的任务是检查这一串字符中的( ) ,[ ],{ }是否匹配。
输入
输入数据有多组,处理到文件结束。
输出
如果匹配就输出“yes”,不匹配输出“no”
示例输入
sin(20+10)
{[}]
示例输出
yes
no
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define maxsize 51
typedef char ElemType;
typedef struct
{
ElemType *base;
ElemType *top;
int Length;
}SQ;
int Init(SQ &S)
{
S.base=(ElemType *)malloc(maxsize*sizeof(ElemType));
if(!S.base) exit(-1);
S.top=S.base;
S.Length=maxsize;
return 1;
}
int push(SQ &S,int e)
{
*S.top++=e;
return 1;
}
int pop(SQ &S,ElemType &e)
{
e=*(--S.top);
return 1;
}
int get(SQ &S)
{
int e;
e=*(S.top-1);
return e;
}
int Empty(SQ &S)
{
if(S.top==S.base) return 1;
return 0;
}
void Clear(SQ &S)
{
S.top=S.base;
}
int com_de(char ch)
{
if(ch=='(') return 1;
else if(ch=='[') return 2;
else if(ch=='{') return 3;
else if(ch=='}') return 7;
else if(ch==']') return 8;
else if(ch==')') return 9;
else return 0;
}
int main()
{
ElemType e;
int n,len,i,flag;
char f[maxsize],ff[maxsize];
while(gets(f)!=NULL)
{
SQ S;
Init(S);
len=strlen(f);
flag=0;
for(i=0;i<len;i++)
{
if(com_de(f[i])>0&&com_de(f[i])<5)
push(S,f[i]);
else if(com_de(f[i])>5)
{
if(Empty(S))
{
flag=0;
break;
}
else
{
if(com_de(f[i])+com_de(get(S))==10)
{
flag=1;
pop(S,e);
}
else
{
flag=0;
break;
}
}
}
}
if(flag==1&&Empty(S))
printf("yes\n");
else
printf("no\n");
}
}