Вопрос немного неясен - вы хотите узнать что-то о функциях сортировки или вы просто хотите, чтобы программа работала?: -)
Если вам просто нужно что-то, что работает, вы можете рассмотреть возможность использования динамически расширяемого массива вместо связанного списка.Таким образом, вы можете использовать realloc () при добавлении новых записей и сортировать их с помощью обычной функции qsort ()
. В качестве побочного эффекта вы также можете увидеть меньшую фрагментацию памяти по сравнению с использованием связанного списка, который может иметь хорошие эффектыОбщая производительность - особенно если вы делаете меньше и больше перераспределения.Код также будет более компактным, что может улучшить читаемость.
Обновление: Ах, я не могу удержаться, показывая, что я имею в виду.Если вы используете динамически расширяемый массив, функция new_node может быть реализована следующим образом:
NODE * nodes = NULL;
unsigned node_count = 0;
void new_node(char word) {
unsigned n;
for (n = 0; n < node_count && strcmp(nodes[n], word) != 0; n++);
if (n < node_count) {
nodes[n].count++;
} else {
nodes = realloc(nodes, sizeof(NODE) * node_count + 1);
assert(nodes != NULL);
nodes[n].word = strdup(word);
assert(nodes[n].word != NULL);
nodes[n].count = 1;
}
}
Если вам нравится , это вопрос личного предпочтения или нет.Если это годен к употреблению или нет, зависит от варианта использования.