Sortering af doubly linked list?
Hejsa,Stærkt hjulpet på vej af dette indlæg: http://eksperten.dk/spm/417877 og de dertil hørende svar har jeg fået lavet mig en funktion til at sortere min linked list efter karakterer (som eksempel i dette tilfælde), men når jeg kører den bliver karaktererne faktisk ikke sorteret, og jeg kan ikke lige umiddelbart se hvorfor...
Min grundlæggende struct ser således ud:
struct node // Doubly linked list
{
char* name;
int grade;
struct node* next;
struct node* previous;
};
Og min funktion til at sortere dem med ser sådan ud:
void sortgrades(struct node *node)
{
//header contains the first element from the original linked list
//remainder is the rest of the linked list
struct node *header=NULL, *remainder, *first=NULL, *parent=NULL;
int i = 1;
printf("Ordering list...\n");
// Here we split list in two, header and remainder as defined above:
while(node) // As long as we are dealing with a non-NULL element, aka we're in our linked list
{
if (i == 1) // First iteration, so we need to assign the header
{
header = (struct node *)malloc(sizeof(struct node));
header->name = node->name;
header->grade = node->grade;
header->next = NULL;
}
else
{
remainder = (struct node *)malloc(sizeof(struct node)); // Must allocate memory for it!
if (i == 2) // Second iteration (special case)
first = remainder;
remainder->name = node->name;
remainder->grade = node->grade;
remainder->next = NULL;
if(parent)
parent->next = remainder;
parent = remainder;
}
node = node->next;
i++;
}
}
Spørgsmålet er så, hvordan jeg kan få det til at virke - sig endelig til, hvis I gerne vil se al koden osv.! :-) Og hvilken indflydelse har det, at min linked list er doubly linked frem for ovenstående link's singly linked natur? Ydermere er jeg ikke helt sikker på, hvad parent egentlig er i denne funktion - mit bud er, at den svarer til hvad der ville være node->previous i min doubly linked list. På forhånd mange tak!