Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
嵌套列表的C等价物(Python)_C_Arrays_Algorithm_Data Structures_Nested - Fatal编程技术网

嵌套列表的C等价物(Python)

嵌套列表的C等价物(Python),c,arrays,algorithm,data-structures,nested,C,Arrays,Algorithm,Data Structures,Nested,我是C新手,试图通过与Python的比较来学习 我的问题很琐碎,但我仍然需要专家的一些解释。以下是Python嵌套列表结构: L = [1, [2, [3, 4], 5], 6, [7, 8]] 下面是一段有趣的代码(取自Lutz的“Learning Python”),用于处理嵌套结构(求和元素): 如果我把L传递给这个函数,我会得到36,这是L中元素的总和。 嵌套列表和这个特定函数如何准确地转换成C?L的每个元素是什么类型的?它可以是一个数字(例如在C中是一个int),甚至可以是一个列表(在

我是C新手,试图通过与Python的比较来学习 我的问题很琐碎,但我仍然需要专家的一些解释。以下是Python嵌套列表结构:

L = [1, [2, [3, 4], 5], 6, [7, 8]]
下面是一段有趣的代码(取自Lutz的“Learning Python”),用于处理嵌套结构(求和元素):

如果我把L传递给这个函数,我会得到36,这是L中元素的总和。
嵌套列表和这个特定函数如何准确地转换成C?

L的每个元素是什么类型的?它可以是一个数字(例如在C中是一个
int
),甚至可以是一个列表(在C中是用
struct
s实现的典型列表)

为了实现这一点,您需要一个通用列表(即每个节点的数据类型为
void*
)。请注意,C没有提供标准库中的列表,您必须编写一个列表(下面是一个示例)

然后,为了求和,你可以这样做:

int sumtree(struct listnode * L) {
    int tot = 0;
    while (L != NULL) {
        if(L.data /* TODO: check if it is a number*/)
            tot += L.data;
        else /* L.data is a sublist */
            tot = sumtree(L.data);
        list = list->next;
    }
    return tot;
}
要获取类型,您需要遵循以下答案:


然而,C中的这种嵌套列表并不常见,我建议您重新处理这个问题。

C中的数组是固定长度的。如果需要可变长度,则需要一个包含指针的结构。试着阅读结构和链接列表。你的问题是完全合理的。然而,答案是C不支持将“list”作为内置构造。你必须自己发明一个“列表”,使用类似“struct”或“array”的结构。Python是一种动态类型语言,与C有很大的不同。你不能像Python那样期望C中的代码。我不期望相同的代码,我首先希望得到相同的结果
int sumtree(struct listnode * L) {
    int tot = 0;
    while (L != NULL) {
        if(L.data /* TODO: check if it is a number*/)
            tot += L.data;
        else /* L.data is a sublist */
            tot = sumtree(L.data);
        list = list->next;
    }
    return tot;
}