括号匹配的检验(数据结构之栈 二)

来源:互联网 发布:padding tensorflow 编辑:程序博客网 时间:2024/06/04 19:37

描述

采用栈实现,练习进栈入栈函数的编写.

输入

输入的第一行包含一个数,n
n表示要用例的个数
接下来是n行由括号构成的字符串,包含‘(’、‘)’、‘[’、‘]’。

输出

对每一测试用例,用一行输出结果,如果匹配,输出“YES”,否则输出“NO”

样例输入

2
[([][]())]
)[]()

样例输出

YES
NO
#include<iostream>#include<stdio.h>#include<stdlib.h>#define MI 100#define MX 1000using namespace std;typedef struct{    int *top;    int *base;    int stacklist;}sqstack;int inistack(sqstack &s){    s.base =(int *)malloc(MI*sizeof(int));    if(!s.base)exit(-2);    s.top=s.base;    s.stacklist=MI;    return 0;}int push(sqstack &s,int e){    if(s.top-s.base==s.stacklist)    {        s.base=(int *)realloc(s.base,(s.stacklist+MX)*sizeof(int));        s.top=s.base+s.stacklist;        s.stacklist+=MX;    }    *s.top++=e;    return 1;}int pop(sqstack &s){    if(s.top==s.base)return 0;    *--s.top;    return 1;}int gettop(sqstack &s,char &e){    if(s.top==s.base)return 0;    e=*(s.top-1);    return 1;}int main(){    int n;    sqstack s;    char c,e;    cin>>n;    getchar();    while(n--)    {        inistack(s);        while((c=getchar())!='\n'){            if(s.top==s.base)push(s,c);            else            {if(c=='('||c=='[')push(s,c);            if(c==')')                {                    gettop(s,e);                    if(e=='(')pop(s);                    else push(s,c);                }             if(c==']')                {                    gettop(s,e);                    if(e=='[')pop(s);                    else push(s,c);                }            }        }        if(s.top==s.base)cout<<"YES"<<endl;        else cout<<"NO"<<endl;    }    return 0;}

如果有疑问,请留言
原创粉丝点击