A primeira tentação de modelar isso é usar uma estrutura de dados no estilo de quatro árvores. Cada átomo de carbono tem quatro conexões, cada oxigênio dois e cada hidrogênio um. Eu não acho que essa seja a solução adequada.
Eu acho que a solução adequada já foi inventada. A estrutura de dados a ser usada é uma sequência.
Pense sobre isso. Os químicos vêm modelando compostos orgânicos há bastante tempo. Se você mostrar um químico CH4, eles o reconhecerão imediatamente como metano. Mostre a eles CH3CH2OH e eles reconhecerão isso como etanol. Eles reconhecem isso porque identificam a combinação CH3CH2 como um composto "eth" (significando dois átomos de carbono) e o OH como um grupo "anol" ou álcool.
Também temos uma metodologia pré-existente para pesquisar e identificar substrings - expressões regulares.
Então, para representar programaticamente um composto orgânico, eu definiria um composto como contendo uma cadeia que representa sua fórmula química e uma cadeia que define seu nome químico. Poderia ter métodos que identificassem quais propriedades "especiais" o composto possuía.
Um exemplo de classe em C #:
public class OrganicCompound
{
private Regex benzineRingRegex;
public OrganicCompound(string formula, NameCalculator nameCalculator, Regex benzineRingRegex)
{
this.Formula = formula;
this.Name = nameCalculator.CalculateName(formula);
this.benzineRingRegex = benzineRingRegex
}
public string Formula { get; private set; }
public string Name { get; private set; }
public bool HasBenzeneRing()
{
return Regex.IsMatch(this.Formula, benzineRingRegex);
}
}
Obviamente, você precisaria escrever a classe nameCalculator, que calcula o nome com base na fórmula. Você precisaria criar o regex que define um anel de benzina. Defina regexes extras para cada um dos grupos que você deseja pesquisar.
A vantagem de modelar os compostos dessa maneira é a linguagem exatamente no domínio comercial do usuário final. Tudo que você, como desenvolvedor, precisa saber são as sequências a serem pesquisadas, que podem ser facilmente fornecidas por um livro de texto ou por um químico.
Se forem necessárias representações estruturais desses produtos químicos, sugiro procurar manter as representações SMILES da fórmula.
Representação da fórmula química SMILES