首页 新闻 会员 周边 捐助

广义表的创建(头尾链表存储表示)

0
悬赏园豆:100 [已解决问题] 解决于 2013-11-12 16:42

 

这个是广义表的存储结构中广义表的创建函数,

 1  // c5-4.h 广义表的头尾链表存储结构。在教科书第109页
 2  enum ElemTag{ATOM,LIST};//编译器自动将ATOM==0,原子 LIST==1 字表
 3  typedef struct GLNode
 4  { ElemTag tag; 
 5    union 
 6    { AtomType atom; 
 7      struct
 8      { GLNode *hp,*tp;
 9      }ptr; 
10    };
11  }*GList,GLNode; 

 

 

 1 void CreateGList(GList &L,SString S) 
 2  { 
 3    SString sub,hsub,emp;
 4    GList p,q;
 5    StrAssign(emp,"()"); 
 6    if(!StrCompare(S,emp)) 
 7      L=NULL; 
 8    else 
 9    { if(!(L=(GList)malloc(sizeof(GLNode)))) 
10        exit(OVERFLOW);
11      if(StrLength(S)==1) 
12      { L->tag=ATOM; 
13        L->atom=S[1]; 
14      }
15      else 
16      { L->tag=LIST; 
17        p=L; 
18        SubString(sub,S,2,StrLength(S)-2);
19        
20        do 
21        { sever(sub,hsub); 
22          CreateGList(p->ptr.hp,hsub); 
23          q=p; 
24          if(!StrEmpty(sub)) 
25          { if(!(p=(GLNode*)malloc(sizeof(GLNode)))) 
26              exit(OVERFLOW);
27            p->tag=LIST; 
28            q->ptr.tp=p; 
29          }
30        }while(!StrEmpty(sub)); 
31        q->ptr.tp=NULL; 
32      }
33    }
34  }
35 
36 void sever(SString str,SString hstr) 
37  { 
38    int n,k=0,i=0; 
39    SString ch,c1,c2,c3;
40    StrAssign(c1,","); 
41    StrAssign(c2,"("); 
42    StrAssign(c3,")"); 
43    n=StrLength(str); 
44    do 
45    { ++i;
46      SubString(ch,str,i,1); 
47      if(!StrCompare(ch,c2)) 
48        ++k; 
49      else if(!StrCompare(ch,c3)) 
50        --k; 
51    }while(i<n&&StrCompare(ch,c1)||k!=0); 
52    if(i<n) 
53    { SubString(hstr,str,1,i-1); 
54      SubString(str,str,i+1,n-i); 
55    }
56    else 
57    { StrCopy(hstr,str); 
58      ClearString(str); 
59    }
60  }

 

函数sever有什么功能啊,看不懂,求求高手帮个忙,帮我分析分析!

 

C
坤仔OK的主页 坤仔OK | 初学一级 | 园豆:64
提问于:2013-11-11 14:14
< >
分享
最佳答案
1

是把它分两部分的,一个序列有一个叫做head头的部分,一个叫作tail尾

收获园豆:100
angelshelter | 大侠五级 |园豆:9914 | 2013-11-11 17:38
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册