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

本文介绍了一种递归算法,用于输出广义表中所有的原子项及其所在层次。广义表通过GList结构体定义,算法遍历每个节点,区分原子节点与列表节点,并递归地处理列表节点。

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

广义表类型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);//表尾节点,递归
        }    
   }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值