声明,更改和添加C中的结构列表数组

时间:2014-07-05 22:35:56

标签: arrays list c

我已经创建了一个结构体,结构体上有一个度量标准。我正在生成一系列这些结构,我想根据这个指标将它们排序成一个数组。基本上,如果度量标准为0,我希望它在数组的[0]槽中的列表中,如果度量值为14,我希望它在数组的[14]槽中的列表中。度量的约束(数组的大小)是基于生成结构的相同变量而变化的,因此我需要使用malloc动态声明数组。我一直在试验如何获取我的结构列表。我无法弄明白。我已经搜索了问题并且无法找到解决方案。

此外,一旦我有了数组,如何将另一个元素添加到特定数组单元格的列表中?然后返回并将第i个单元格中列表的所有元素与第(n-i)个单元格的元素进行比较?

2 个答案:

答案 0 :(得分:3)

您想要的是哈希表,有时也称为关联数组词典。这是一个看起来像数组但可以获得任何(可散列)数据类型作为索引的数据结构;由于您的指标,您的结构是可清除的。动态哈希表(例如python的字典)将自行调整大小以适应其内容。

如果要在每个单元格中保留多个元素,只需将每个单元格设为一个列表即可。在python或任何其他高级语言中,您只需使用list数据类型。在较低级别的语言中,您可以使用链接列表。

答案 1 :(得分:1)

根据您的问题和您对@Yuval的评论,您似乎可以使用Python对此进行调查,如果我理解正确,您可能会有多个struct具有相同的{{1}你希望现在将它们组合成一个列表的值(如果有任何错误,请更正我,并且我会尝试根据需要进行编辑)。

@Yuval提出了一个很好的观点 - 这似乎是关于使用哈希表/字典,一旦你习惯它们就非常有用。基本上,它们不是简单地通过某个索引访问元素,而是从0到metric或类似,它们为您提供了一种方法,可以将键与值或值列表相关联。

这里有一些Python代码,假设您已经制作了N-1,并且他们有struct属性:

metric

这里有几个要点:

1)这些结果可能会出现在你的字典中,随机地#34; - 该指标不会连续订购。这与哈希表实际工作方式的一些内部细节有关,现在深入解释可能有些过分,但要记住的要点是字典是未排序的。要解决这个问题,当您访问元素时:

## build the hahtable
metricDict = dict() ## or: metricDict = {}
for struct in structs:
    key = struct.metric
    metricDict[key] = struct

## access your items:
for metric, struct in metricDict.items():
    ## ... whatever you want to do

2)这(默默地)忽略了for metric, struct in sorted(metricDict.items()): ## whatever you want to do 具有相同值的多个struct的问题 - 它仅保留在metric的最后一个struct上,覆盖以前的。有一些简单的方法可以解决这个问题 - 你可以存储一个值列表(或者,我可能会说:你存储的是一个结构列表的值),而不是存储单个值。

metric

我试图让它比必要更明确。这种将事物聚合和分组在一起的想法很常见,Python甚至还有一个让事情变得简单的模块:

metricDict = dict()
for struct in structs:
    key = struct.metric
    if key in metricDict:
        metricDict[key].append(struct) ## add the struct to the list
    else:  ## first time we've seen key
        metricDict[key] = list() ## or metricDict[key] = []
        metricDict[key].append(struct)

import collections metricDict = collections.defaultdict(list) for struct in structs: key = struct.metric metricDict[key].append(struct) 很聪明,知道如果它还没有看到一个键,而不是抛出错误,它只会创建一个默认值 - 在这种情况下为空列表 - 然后添加您的metricDict到该列表。

现在访问结构列表:

struct