按表头、表尾的分析方法重写求广义表的深度的递归算法

试按表头、表尾的分析方法重写求广义表的深度的递归算法。

广义表类型GList的定义:

typedef enum {ATOM,LIST} ElemTag;
typedef struct GLNode{
     ElemTag tag;
     union {
       char atom;
       struct { 
         GLNode *hp, *tp;
       } ptr;
     }un;
} *GList;

实现函数如下:

int GListDepth(GList ls)
/* Return the depth of list */
{
   int max = 0,dep = 0;
   GList p;
   if(!ls) return 1;//空表深度为1
   if(ls -> tag == ATOM)return 0;//原子深度为0
   for(max = 0,p = ls; p; p = p -> un.ptr.tp){
        dep = GListDepth(p -> un.ptr.hp);//求以p->un.ptr.hp为头结点的子表深度
        if(dep > max)
            max = dep;
   }
   return max + 1;//非空表的深度是各元素的深度的最大值加1
}
    原文作者:递归算法
    原文地址: https://blog.csdn.net/tim_tsang/article/details/33344981
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞