В настоящее время я работаю над проектом по моему курсу программирования c, где мы должны взять значения из текстового файла и поместить их в связанный список. Структура имеет 2 списка, один в том порядке, в котором он был введен, показан как следующий, а второй в порядке возрастания, показанный как сортировка. Я выбираю пузырьковую сортировку, чтобы поместить значения в порядке возрастания. Моя структура для связанного списка показана ниже.
typedef struct NODE {
int value;
double key;
struct NODE *next;
struct NODE *sort;
}sortedList;
Часть того, что заставляет мои пузыри сортировать работу, находится в основном. checkAscending убедится, что список сортировки находится в порядке возрастания, и вернет 1, если это не так. Если я контролирую первый узел и проверяю, является ли это значение наименьшим, код будет работать идеально, иначе его всегда будет segfault
while ( checkAscending(headSort) == 1 ){
bubbleSort(headSort);
}
Код для сортировки пузырьков показан ниже, и проблема заключается в том, что это приводит к сегментации неисправность. Я считаю, что это потому, что когда связанный список находится на первом узле, предыдущий узел не существует.
void bubbleSort(sortedList *headSort ) {
sortedList *prev = headSort;
while(headSort != NULL && headSort->sort != NULL){
if (headSort->key > headSort->sort->key){
/*swaps the two nodes*/
sortedList *temp = headSort ;
prev->sort = headSort->sort ;
headSort->sort = headSort->sort->sort;
prev->sort->sort = temp;
}
prev = headSort;
headSort = headSort->sort;
}
}
Я понятия не имею, как это исправить, и надеялся, что кто-нибудь может дать мне подсказку, как что делать дальше, чтобы разрешить сортировку первого узла.