设计一个算法 Same(g1,g2),判断两个广义表 g1 和 g2 是否相同?
// 定义广义表节点的结构
struct Node {
int value; // 节点的值,这里假设广义表中的元素都是整数
struct Node* next; // 指向下一个节点的指针
struct Node* sublist; // 指向子表的指针
};
// 判断两个广义表是否相同的递归函数
bool Same(struct Node* g1, struct Node* g2) {
// 如果两个广义表都为空,则认为它们相同
if (g1 == NULL && g2 == NULL) {
return true;
}
// 如果只有一个广义表为空,或者两个广义表的值不相等,则认为它们不相同
if (g1 == NULL || g2 == NULL || g1->value != g2->value) {
return false;
}
// 递归地比较两个广义表的子表
return Same(g1->sublist, g2->sublist) && Same(g1->next, g2->next);
}
是的,判断两个广义表g1 和 g2 是否相同!
相同的条件为:节点要么同时为空,原子节点的数据相同,兄弟节点也是相同。