考研数据结构与算法之堆栈的使用(三)利用堆栈匹配括号

来源:互联网 发布:电脑打不开windows 编辑:程序博客网 时间:2024/05/16 12:33

    具体实现方法如下:

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;}

确实是我疏忽了,由于觉得简单就忘记了对它进行测试,结果今天使用的时候怎么也出不来结果。

0 0
原创粉丝点击