请写出判断两个广义表是否相等的递归算法,如果两个广义表相等,则输出1,否则输出0。如A=((a)),B=((a)),则A=B,输出1。要求输入的广义表采用链式存储结构存储,并基于链式存储结构编写递归函数。
时间: 2023-11-24 20:07:36 浏览: 32
假设广义表的链式存储结构如下:
```c
typedef struct GLNode{
int tag; // 标志域,0表示原子,1表示子表
union {
AtomType atom; // 原子结点的值域
struct GLNode* hp; // 指向子表的指针
} u;
struct GLNode* tp; // 指向下一个元素或子表的指针
}GLNode, *GList;
```
其中,`tag`表示结点类型,`u`是联合体类型,用于存储原子结点的值或子表结点的指针,`tp`指向下一个元素或子表。
判断两个广义表是否相等的递归算法如下:
```c
int equal(GList A, GList B){
if(A == NULL && B == NULL) return 1; // 空表相等
if(A == NULL || B == NULL) return 0; // 一个为空表,另一个不为空表,不相等
if(A->tag != B->tag) return 0; // 类型不同,不相等
if(A->tag == 0 && B->tag == 0){ // 均为原子结点,比较值
if(A->u.atom == B->u.atom) return equal(A->tp, B->tp);
else return 0;
}
else{ // 均为子表结点,递归比较子表
if(equal(A->u.hp, B->u.hp)) return equal(A->tp, B->tp);
else return 0;
}
}
```
其中,`A`和`B`分别表示要比较的两个广义表。函数返回值为1表示相等,为0表示不相等。
相关推荐
![](https://img-home.csdnimg.cn/images/20210720083646.png)
![docx](https://img-home.csdnimg.cn/images/20210720083331.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![docx](https://img-home.csdnimg.cn/images/20210720083331.png)
![docx](https://img-home.csdnimg.cn/images/20210720083331.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![docx](https://img-home.csdnimg.cn/images/20210720083331.png)
![docx](https://img-home.csdnimg.cn/images/20210720083331.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![doc](https://img-home.csdnimg.cn/images/20210720083327.png)