/**********
【题目】试编写判别两个广义表是否相等的递归算法。
广义表类型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;
}