回复 5楼 wp231957
#include<iostream.h>
#include<fstream.h>
#include<math.h>
#include<stdlib.h>
#include<string.h>
#define STACK_INIT_SIZE 100
#define OK 1
ifstream fin("input.txt",ios::in);
ofstream fout("output.txt",ios::out);
struct SqStack
{
char *base;
char *top;
int
stacksize;
};
void push(SqStack &S,char e)
{
*S.top++=e;
}
int pop1(SqStack &S,char k)
{
k=*--S.top;
if(k==')')
return 1;
else
return 0;
}
int pop2(SqStack &S,char k)
{
k=*--S.top;
if(k==']')
return 1;
else
return 0;
}
int pop3(SqStack &S,char k)
{
k=*--S.top;
if(k=='}')
return 1;
else
return 0;
}
int StackEmpty(SqStack &S)
{
if(S.top==S.base)
return 1;
else
return 0;
}
int MergeList(SqStack S,char a[],int j)
{
char e,k;
for(int i=0;i<j;++i)
{
e=a[i];
switch(e)
{
case '(':
push(S,e);
break;
case '[':
push(S,e);
break;
case '{':
push(S,e);
break;
case ')':
if(StackEmpty(S))
return 0;
else
if(!pop1(S,k))
return 0;
else
break;
case ']':
if(StackEmpty(S))
return 0;
else
if(!pop2(S,k))
return 0;
else
break;
case '}':
if(StackEmpty(S))
return 0;
else
if(!pop3(S,k))
return 0;
else
break;
}
if(StackEmpty(S))
return 1;
else
return 0;
}
char InitStack(SqStack &S)
{
S.base=(char *)malloc(STACK_INIT_SIZE*sizeof(char));
if(!S.base)
exit(OVERFLOW);
S.top=S.base;
S.stacksize=STACK_INIT_SIZE;
return Ok;
}
void main()
{
int m,flag;
char a[100]={0};
SqStack S;
fin>>m;
for(int i=0;i<m;++i)
fin>>a[i];
InitStack(S)
flag=MergeList(S,a[],m);
if(flag)
fout<<"yes!";
else
fout<,"no!";
fin.close();
fout.close();
}
修改了请具体说明原因
3q