Если вы хотите отсортировать массив структур, вы можете использовать функцию qsort
, см. man qsort
. Требуется базовый адрес массива, количество элементов, размер элемента и функция сравнения:
int compare(const void *a, const void *b) {
Medico *medA = (Medico*) a;
Medico *medB = (Medico*) b;
return /* compare medA and medB */;
}
Medico *medicos = /* initialize */;
qsort(medicos, numberOfMedicos, sizeof(Medico), compare);
Да, только сейчас я заметил указатель следующей записи, который, вероятно, делает этот ответ бесполезным. (Я изменил заголовок вопроса, чтобы сделать связанный список очевидным.) Чтобы сделать хоть что-то из этого ответа, вы всегда можете скопировать список в массив:
Medico *medicos = calloc(sizeof(Medico), numberOfMedicos);
Medico *current = /* first record in your linked list */;
int i = 0;
assert(current);
do {
medicos[i++] = *current;
current = current->next;
} while (current);
// Here you can sort the array.
free(medicos);
Конечно, это зависит от количества записей и других переменных.
(My C немного ржавый, не стесняйтесь исправлять.)