判别两个广义表是否相等的递归算法

试编写判别两个广义表是否相等的递归算法。

广义表类型GList的定义:

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

实现的函数如下:

Status Equal(GList A, GList B)
/* 判断广义表A和B是否相等,是则返回TRUE,否则返回FALSE */
{
  if(A -> tag == ATOM && B -> tag == ATOM){
    //当都为原子节点ATOM时
        if(A -> un.atom == B -> un.atom)
            return TRUE;
        else
            return FALSE;
  }else if(A -> tag == LIST && B -> tag == LIST){
    //当都为广义表节点LIST时
        if(Equal(A -> un.ptr.hp,B -> un.ptr.hp) && Equal(A -> un.ptr.tp,B -> un.ptr.tp))
            //递归判断表头节点是否相等,表尾节点是否相等
            return TRUE;
        else
            return FALSE;    
  }  
}

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