试着按表头表尾的分析方法重写求广义表的深度的递归算法
时间: 2023-06-11 10:04:57 浏览: 136
好的,让我来为您回答这个问题。求广义表的深度的递归算法可以按照表头表尾的分析方法来重写。具体算法如下:
1. 如果广义表为空,则深度为0。
2. 如果广义表不为空且为原子,则深度为1。
3. 如果广义表不为空且为非空表,则深度为表头的深度与表尾的深度的较大值加1。
根据以上算法,可以写出对应的递归函数。具体代码如下:
```
int depth(GLNode* L) {
if (L == NULL) {
return 0;
} else if (L->tag == 0) {
int max_depth = 0;
GLNode* p = L->hp;
while (p != NULL) {
int d = depth(p);
if (d > max_depth) {
max_depth = d;
}
p = p->tp;
}
return max_depth + 1;
} else {
return 1;
}
}
```
在这段代码中,我们使用了GLNode结构体来表示广义表,tag字段用于区分原子和表,hp字段表示表头指针,tp字段表示表尾指针。对于非空表的情况,我们使用while循环遍历表头中的每个元素,并调用递归函数求出深度的最大值,然后加1返回即可。
希望以上答案能够满足您的需要。如果您还有其他问题,欢迎继续提问。
阅读全文