数据结构 广义表的建立与求深度

来源:互联网 发布:少儿体育培训市场数据 编辑:程序博客网 时间:2024/05/27 20:26

     今天心血来潮想写一下广义表的建立与求深度,但是却写的很纠结 ,调试了很长时间,千万别随便乱用全局变量,否则在递归的时候会改变上一层同变量的值,这样的话查很长时间也检查不出来。

 

#include <iostream>#include <string.h>using namespace std;string s1,s2;char s3[10000];class num{    public:    int tag;    char atom;    num *tp,*hp;};num *q;int max1,dep;int main(){    void build(string str,num *&p);    int solve(num *p);    int i,j,m,n,s,t;    num *head;    getline(cin,s1);    int l=s1.size();    for(i=0,j=0;i<=l-1;i++)    {        if(s1[i]!=' ')        {            s3[j++]=s1[i];        }    }    s3[j]='\0';    s2=s3;    build(s2,head);    t=solve(head);    cout<<t<<endl;    return 0;}void f1(string s,string &sub){    int l=s.size();    int j,i;    for(i=1,j=0;i<=l-2;i++)    {        s3[j++]=s[i];    }    s3[j]='\0';    sub=s3;}void f2(string &s,string &hsub){    int i,j,l;    int x=0;    l=s.size();    for(i=0;i<=l-1;i++)    {        if(s[i]=='(')        {            x+=1;        }else if(s[i]==')')        {            x-=1;        }        if(s[i]==','&&x==0)        {            break;        }    }    x=i-1;    for(i=0,j=0;i<=x;i++)    {        s3[j++]=s[i];    }    s3[j]='\0';    hsub=s3;    for(i=x+2,j=0;i<=l-1;i++)    {        s3[j++]=s[i];    }    s3[j]='\0';    s=s3;}void build(string str,num *&p){    string sub,hsub;    if(str=="()")    {        p=NULL;    }else    {        p=new(num);        if(str.size()==1)        {            p->tag=1;            p->atom=str[0];        }else        {            p->tag=0;            f1(str,sub);            do            {                f2(sub,hsub);                build(hsub,p->hp);                if(sub.size()>0)                {                   q=new(num);                   q->tag=0;                   p->tp=q;                }            }while(sub.size()>0);            p->tp=NULL;        }    }}int solve(num *p){    if(!p)    {        return 1;    }else if(p->tag==1)    {        return 0;    }    for(max1=0;p;p=p->tp)    {        dep=solve(p->hp);        if(dep>max1)        {            max1=dep;        }    }    return max1+1;}