美文网首页
判别两个广义表是否相等的递归算法

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

作者: kiruma | 来源:发表于2017-11-18 11:23 被阅读0次

    /**********

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

    广义表类型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://www.haomeiwen.com/subject/oqdevxtx.html