int CopyGList ( GList ls1, GList *ls2 ) { if ( !ls1 ) *ls2 = NULL; /*复制空表*/ else { if ( ! ( *ls2 = ( Glist ) malloc ( sizeof ( Glnode ) ) ) ) return 0; /*建表结点*/ ( *ls2 )->tag = ls1->tag; if ( ls1->tag = = 0 ) ( *ls2 )->data = ls1->data; /*复制单元素*/ else { CopyGList ( & ( ( *ls2 )->ptr.hp ), ls1->ptr.hp ); /*复制广义表ls1->ptr.hp 的一个副本*/ CopyGList ( & ( ( *ls2 )->ptr.tp ) , ls1->ptr.tp ); /*复制广义表ls1->ptr.tp 的一个副本*/ } } return 1; }