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