It looks like some kind of graph data structure:
- A molecule has a set of atoms
- Atoms are linked by bonds:
- A bond can be double, single or tripple
- A bond has a length
- A bond has an angle
- It's a cyclic graph (for instance, the example in the question has a ring of alternating single and double bonds)
- It's not a directed graph (if two atoms are bonded, it doesn't matter from which end you approach the bond)
Typically you'd store a graph as an array of nodes (atoms) and an array of edges (bonds). Nodes and edges would both be pointers to structs.
A node (atom) would store the element.
An edge (bond) would store the following fields:
- A pair of pointers to nodes
- The type of bond (double/single)
- The bond length and angle
Since it's not a directed graph, your data structure would consider an edge between A and B to be equivalent to an edge between B and A. That is, for a given pair of atoms, you'd expect your edge array to contain an edge from A to B and never from B to A.