else if(ls->tag==0) return 0;
m=GListDepth(ls->un.ptr.hp)+1; n=GListDepth(ls->un.ptr.tp); if(m>n) return m; else return n; } /*
{ int m,n;
if(ls==NULL) return 1;
else if(ls->tag==0) return 0; m=GListDepth(ls->ptr.hp)+1; n=GListDepth(ls->ptr.tp); return m>n?m:n; } */
5.33④ 试编写递归算法,输出广义表中所有原子项及其所在层次。 广义表类型GList的定义:
typedef enum {ATOM,LIST} ElemTag; typedef struct GLNode{ ElemTag tag; union {
char atom; struct {
GLNode *hp, *tp; } ptr; }un; } *GList;
void OutAtom(GList A, int layer, void(*Out2)(char, int))
/* 递归地用函数Out2输出广义表的原子及其所在层次,layer表示当前层次 */ {
if(!A) return ;
if(!A->tag) Out2(A->un.atom,layer); else {
OutAtom(A->un.ptr.hp,layer+1,Out2); OutAtom(A->un.ptr.tp,layer,Out2); } }