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

   /**********

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

广义表类型GList的定义:

typedef enum {ATOM,LIST} ElemTag;

typedef struct GLNode{

     ElemTag tag;

     union {

       char atom;

       struct { 

         GLNode *hp, *tp;

       } ptr;

     }un;

} *GList;

**********/

 由于两个广义表有一个不相等,那就肯定返回FALSE,一开始想到的是如果不相等,返回0,相等返回1,再让返回的值与之前的值相乘,这样子的话0一直乘下去还会是0,那就解决了有一个不相等就一定会返回FALSE的问题,不过再写算法时很困难。后来想到了一种简单的写法。

Status Equal(GList A, GList B)
/* 判断广义表A和B是否相等,是则返回TRUE,否则返回FALSE */

      if(A==NULL){
          if(B==NULL)
             return TRUE;
          else return FALSE;
        }
      if(A->tag==ATOM)  {
           if(B->tag==ATOM&&B->un.atom==A->un.atom)
               return TRUE;
           else return FALSE;    
       }  
       
       if(Equal(A->un.ptr.hp,B->un.ptr.hp))
             if(Equal(A->un.ptr.tp,B->un.ptr.tp))
                    return TRUE;
             else return FALSE;
       else return FALSE;
}

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