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

2017-11-18  本文已影响0人  kiruma

/**********

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

广义表类型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;

}

上一篇下一篇

猜你喜欢

热点阅读