Я пытаюсь сортировать линейный связанный список по фамилии, однако он сбой, также я не знаю, работает ли мой алгоритм правильно.Как отсортировать связанный список
Может кто-нибудь помочь мне остановить его от сбоя и посмотреть, работает ли мой алгоритм сортировки списка?
void sort(NODEPTR *employees, int maxEmployees)
{
int i = 0, j = 0, k = 0;
NODEPTR p, q, pTrail = NULL, qTrail, temp;
temp = (NODEPTR) calloc(1, sizeof(node));
qTrail = *employees;
q = (*employees)->next;
for (i = 0; i < maxEmployees; i++)
{
p = *employees;
while (p != q)
{
if (strcmp(p->lastName, q->lastName))
{
temp = q;
qTrail = q->next;
q = pTrail->next;
temp = pTrail->next;
pTrail = temp;
p = q;
}
else
{
pTrail = p;
p = p->next;
}
}
qTrail = q;
q = q->next;
pTrail = NULL;
}
printf("%10s %10ss\n", "First", "Last");
printf("%10s %10s\n", "-----", "----");
for (i = 0; i < maxEmployees; i++)
{
printf("%10s %10ss\n", (*employees)->firstName, (*employees)->lastName);
}
}
Связанный список:
typedef struct node
{
char firstName[11];
char lastName[16];
char gender;
int tenure;
char rate;
float salary;
struct node *next;
} node, *NODEPTR;
Вместо переключения целых узлов с местами вы должны переключать только их содержимое и оставить привязку нетронутой. Также было бы неплохо узнать, какова ваша ошибка при сбое. –
@AlexandruBarbarosie Но если узлы большие, то это превратит программу невероятно медленно ... – Lundin
@ Lundin хорошо, да, но в его случае это не так уж и много. Кроме того, ему не хватает OP от любых утечек памяти. –