c语言代码计算广义表深度
时间: 2024-10-23 07:19:31 浏览: 21
在C语言中,广义表是一种复杂的数据结构,通常用于表示递归数据。计算广义表的深度,也就是其嵌套层数,可以采用递归的方式。下面是一个简单的示例函数:
```c
#include <stdio.h>
typedef struct cons {
void *car; // 表头元素
struct cons *cdr; // 指向下一个节点的指针
} Cons;
int list_depth(Cons *lst) {
if (lst == NULL) { // 如果列表为空,深度为0
return 0;
} else {
int car_depth = list_depth(lst->cdr); // 计算 cdr 的深度
return car_depth + 1; // 返回当前节点的深度,加一表示当前节点
}
}
// 示例用法
void print_list_and_depth(Cons *lst) {
printf("List depth: %d\n", list_depth(lst));
if (lst != NULL) {
printf("Element: %p\n", lst->car);
print_list_and_depth(lst->cdr);
}
}
int main() {
Cons *list = malloc(sizeof(Cons)); // 创建一个空列表
list->car = "Head"; // 添加头部元素
list->cdr = NULL; // 设置尾部为NULL
print_list_and_depth(list);
free(list); // 别忘了释放内存
return 0;
}
```
这个`list_depth`函数会检查当前节点是否为空,如果为空则返回0;如果不为空,则递归地计算`cdr`的深度并加上1。在`print_list_and_depth`中,你可以看到如何使用它来打印广义表及其深度。
阅读全文