广义表的存储结构(广义表的递归算法,复制广义表,求广义表的深度)
// c5-5.h 广义表的头尾链表存储结构(见图5.16) enum ElemTag{ATOM,LIST}; // ATOM==0:原子,LIST==1:子表 typedef struct GLNode { ElemTag tag; // 公共部分,用于区分原子结点和表结点 union // 原子结点和表结点的联合部分 { AtomType atom; // atom是原子结点的值域,AtomType由用户定义 struct { GLNode *hp,*tp; }ptr; // ptr是表结点的指针域,prt.hp和ptr.tp分别指向表头和表尾 }; }*GList,GLNode; // 广义表类型 图517 是根据c5-5.h 定义的广义表(a,(b,c,d))的存储结构。它的长度为2,第1 个元素为原子a,第2 个元素为子表(b,c,d)。 // c5-6.h 广义表的扩展线性链表存储表示(见图5.18) enum ElemTag{ATOM,LIST}; // ATOM==0:原子,LIST==1:子表 typedef struct GLNode1 { ElemTag tag; // 公共部分,用于区分原子结点和表结点 union // 原子结点和表结点的联合部分 { AtomType atom; // 原子结点的值域 GLNode1 *hp; // 表结点的表头指针 };