如何在 C 中正确存储结构

Posted

技术标签:

【中文标题】如何在 C 中正确存储结构【英文标题】:How do you properly store structures in C 【发布时间】:2021-11-27 02:50:56 【问题描述】:

正如标题所示,我试图在 C 中存储一个结构,但想找到最有效的方法。答案当然取决于存储的数据对吗?

我知道链表和双向链表,但我正在使用元素周期表,它包含 118 个元素,每个元素有 29 个唯一字段,我不知道链表是​​否必要。目前,我已经测试了将一些元素和 4 个特征存储到结构数组中。有整数、浮点数和字符串。

element[0] - atomicNumber: 1    element: Hydrogen       symbol: H       atomicMass: 1.0070
element[1] - atomicNumber: 2    element: Helium         symbol: He      atomicMass: 4.0020
element[2] - atomicNumber: 3    element: Lithium        symbol: Li      atomicMass: 6.9410
element[3] - atomicNumber: 4    element: Beryllium      symbol: Be      atomicMass: 9.0120

那么,有没有人有任何见解可以帮助指导我?

【问题讨论】:

您尝试解决的问题远比您处理的数据类型更重要。话虽如此,这仍然很可能是一个意见问题。 “最高效”是为了什么?内存使用情况?复杂?插入?删除?抬头?计算通常涉及权衡,因此在做出设计决策时需要指定确切的要求。 你打算如何处理这些数据?您想知道链表是​​否甚至是必要的,但到目前为止,您比我们处于更好的判断位置。另一方面,无论如何,链表很少是答案。 如果您要从集合中添加和删除项目,链接列表会很有用。但是如果它是一个固定大小的集合,那么数组通常是合适的。 您甚至可以考虑使用小型数据库,例如SQLite。 【参考方案1】:

这取决于存储的数据,也取决于您想要使用它的方式。 一个通用指针:如果您确切知道会有多少元素,那么固定大小的数组通常是个好主意。

struct Element 
    int atomicNr;
    char symbol;
    // etc
;

Element elements[] = 
    
       .atomicNr = 1,
       .symbol = 'H', 
    , 
    // etc
;

您甚至可以摆脱 atomicNr 并为此使用数组索引。

【讨论】:

谢谢伍兹。这就是我目前正在做的事情。如果你不能告诉我我是一个新手/初学者,甚至不知道要问什么问题或如何思考创造有用的东西。

以上是关于如何在 C 中正确存储结构的主要内容,如果未能解决你的问题,请参考以下文章

如何读取txt文件并存储在c中的结构数组中

在结构中存储不可变路径的正确方法是啥?

计算机二级Java语言卷005

计算机二级Java语言卷007

单链表,双向链表,循环链表

如何对存储在结构内的结构数组中的日期进行排序?