具体实现方法如下:
int main(void)
{
SqStack S;
InitStack(S);
char str[255];
scanf("%s",str);
int i = 0;
while( str[i] != '\0')
{
if( (str[i]=='[') | (str[i]=='{') | (str[i]=='<') )
{
Push(S, str[i]);
}else if( (str[i]==']') || (str[i]=='}') || (str[i]=='>') )
{
if(!StackEmpty(S))
{
char t;
GetTop(S, t);
if( t == str[i]-2 )
Pop(S, t);
}else
break;
}
i++;
}
if( StackEmpty(S) && (str[i] == '\0') )
{
printf("YES");
}else
{
printf("NO");
}
system("pause");
}
注意一个很有意思的问题,在教材中匹配的是括号是[] {}和()而我则不使用()原因是他俩的ASCII码相差为1而其他的都是2,为了运算方便而进行了简化。另外还要更正之前对GetTop方法的定义,修改后的该函数如下:
Status GetTop(SqStack &S, SElemType &e)
{
if( S.base == S.top )
return ERROR;
e = *(S.top - 1);
return OK;
}
确实是我疏忽了,由于觉得简单就忘记了对它进行测试,结果今天使用的时候怎么也出不来结果。