输出广义表中所有原子项及其所在层次的递归算法

试编写递归算法,输出广义表中所有原子项及其所在层次。

广义表类型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){     
        if(A -> tag == ATOM)//如果是原子节点,直接输出
            Out2(A -> un.atom,layer);
        else{//非原子节点,递归     
            OutAtom(A -> un.ptr.hp, layer+1, Out2);//表头节点,递归
            OutAtom(A -> un.ptr.tp, layer, Out2);//表尾节点,递归
        }    
   }
}

    原文作者:递归算法
    原文地址: https://blog.csdn.net/tim_tsang/article/details/33345555
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞