如何在内存中存储分子?

我想将分子存储在记忆中。 这些可以是简单的分子:

Methane (CH4) CH bond-length: 108.7 pm HH angle: 109 degrees 

但也有更复杂的分子,如扑热息痛(C8H9NO2):
扑热息痛

如何将分子存储在内存中,包括所有键长和角度?


将atom-structs存储在数组中的好主意? 或者,还有更好的方法?

它看起来像某种图形数据结构:

  • 分子有一组primefaces
  • primefaces通过债券联系在一起:
    • 债券可以是双重,单一或三重
    • 债券有一定的长度
    • 债券有一个角度
  • 这是一个循环图(例如,问题中的例子有一个交替的单键和双键环)
  • 它不是有向图(如果有两个primefaces键合在一起,那么从哪个端接近键无关紧要)

通常,您将图形存储为节点(primefaces)数组和边数组(键)。 节点和边都是结构的指针。

节点(atom)将存储该元素。

边(键)将存储以下字段:

  • 一对指向节点的指针
  • 债券类型(双/单)
  • 键长和角度

由于它不是有向图,因此您的数据结构会认为A和B之间的边等于B和A之间的边。也就是说,对于给定的primefaces对,您希望边数组包含边从A到B,从不从B到A.

鉴于您正在建模链接结构,似乎链接数据结构将是最合适的表示。 我担心我不足以猜测所有可能存储每个项目的数据的化学家。

另外,它听起来很像你通常存储图形的一个非常轻微的修改版本 – 节点和链接,以及与每个图形相关联的数据。 在图表中,与链接相关联的典型数据是该链接的“成本”,但在这种情况下,它听起来像是存储向量(角度和长度)。

也许你应该看一下Brad Larson的Molecules ,这是一款适用于iPhone / iPod / iPad的超级开源应用程序,它激发了许多程序员的灵感。 我猜他使用的标准数据格式可以激发你的灵感

您是要对这些分子进行任何类型的计算,还是只是绘制它们? 如果您打算进行任何严格的计算,那么我甚至不会尝试使用Objective C.为了获得最佳性能,您应该将角度,长度和连接存储在正常数组中,并执行必要的所有会计以跟踪什么是什么。 如果涉及大量计算,那些使用花哨的数据结构以及保持分子信息的应用程序运行非常差。

您发布的分子是描述符,如混凝土分子实例的模板(具有不同的笛卡尔坐标)。 因此,对于每种可能数量的分子类型实例,您只需要一个“分子”。 然后,您需要一个坐标数组,您可以从中提取哪个坐标给出一个分子。 对于此单个描述符,您应该创建允许您以尽可能最佳方式访问值的数据结构。 也许是(a,b,r,type)的矢量 – 用于债券的结构,用于角度等的(a,b,c,w,类型)的矢量

问候

RBO