试编写递归算法,输出广义表中所有原子项及其所在层次。
广义表类型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);//表尾节点,递归
}
}
}