Как правильно хранить структуры в C

#c #data-structures #struct

Вопрос:

Как следует из названия, я пытаюсь сохранить структуру в 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
 

Итак, у кого-нибудь есть какое-нибудь представление, которое могло бы помочь мне?

Комментарии:

1. Проблемы, которые вы пытаетесь решить, имеют гораздо большее значение, чем тип данных, с которыми вы имеете дело. Тем не менее, это все еще, скорее всего, вопрос мнения.

2. «наиболее эффективно» для чего? Использование памяти? Сложность? Вставка? Удаление? Поиск? Вычисления часто сопряжены с компромиссами, поэтому при принятии проектных решений необходимо указывать точные требования.

3. Что вы собираетесь делать с данными? Вам интересно, нужны ли вообще связанные списки, но пока вы в лучшем положении, чтобы судить об этом, чем мы. С другой стороны, связанные списки в любом случае редко являются ответом.

4. Связанные списки могут быть полезны, если вы будете добавлять и удалять элементы из коллекции. Но если это коллекция фиксированного размера, обычно подходит массив.

5. Вы могли бы даже рассмотреть возможность использования небольшой базы данных, такой как SQLite .

Ответ №1:

Это зависит как от сохраняемых данных, так и от того, как вы хотите их использовать. Общий указатель: если вы точно знаете, сколько элементов будет, массив фиксированного размера обычно является хорошей идеей.

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

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

Возможно, вы даже сможете избавиться от atomicNr и просто использовать для этого индекс массива.

Комментарии:

1. Спасибо, Вутц. Именно этим я сейчас и занимаюсь. Если бы вы не могли сказать, что я немного новичок/новичок и не знал, какие вопросы даже задавать или как думать о создании чего-то полезного.