Linked list sortering
hejsa, vi har kigget her på eksperten specielt denne tråd:http://www.eksperten.dk/spm/417877
Men har stadig ikke haft heldet med os, og fået det til at fungere som vi gerne vil have det.
Her er vores kode:
Vores structer:
//Main linked list
struct node{
char* navn;
int karakter;
struct node* next;
};
struct node* head; //Headpointer
Vores funktion til at brugeren kan tilføje nye data:
//Metode til tilføjning af nye studerende
newentry(){
//struct node* first=NULL;
//struct node* parent=NULL;
struct node* node;
int karakter;
char* navn = malloc(255); //allokering
struct node* n;
printf("\nName: ");
scanf("%s",navn);
printf("Grade: ");
scanf("%d", &karakter);
n = malloc(sizeof(struct node)); //Allokering af node
n->navn = navn;
n->karakter = karakter;
if(head == NULL)
//Første node,dvs sidste i listen så den får tildelt NULL som nextpointer
n->next = NULL;
else{
// parent -> next = node;
// parent = node;
n->next = head; //Ellers tildeles forrige headpointer til nextpointer
}
head = n; //Ny headpointer
}
Vi udskriver med:
//Metode til udskrivning af linked list
void gradelist(struct node *h){
if(h == NULL){
printf("\nList is empty");
}
while(h != NULL){
printf("%s\t\t%d\n",h->navn,h->karakter);
h=h->next;
}
}
Det er så her vi gerne vil udskrive:
void increase(struct node *h){
/*
head contains the first element from the original linked list
remaining contains the rest of the list
*/
struct node *head=NULL, *remaining, *first=NULL, *parent=NULL;
int i = 0, headlistlength;
printf("Order list in increasing order\n");
// Split list in two
while (h != NULL){
if (i == 0){
h = (struct node*)malloc(sizeof(struct node));
h->navn = h->navn;
h->karakter = h->karakter;
h->next = NULL;
}
else {
remaining = (struct node*)malloc(sizeof(struct node));
if (i == 1) first = remaining;
remaining->navn = h->navn;
remaining->karakter = h->karakter;
remaining->next = NULL;
parent->next = remaining;
parent = remaining;
}
//struct node* node;
h = h->next;
i++;
}
gradelist(first);
}
Problemet er at når vi kører programmet.. så melder den ikke fejl.. Men hvis vi tilføjer nyt data i programmet fx:
Navn: Test
Karakter: 10
, så udskriver den at intet...
Hvis vi så vælger at tilføje 2 dataer som fx følgende:
Navn: Test
Karakter: 10
Navn: Test1
Karakter: 10
Så udskriver den kun:
Navn: Test
Karakter: 10
Den udskriver altså ikke den sidste data værdi, og nogle gang vælger den ligepludselig ikke at udskrive noget...
Hvis nogen kunne hjælpe ville det være super dejligt... For vi er sådan set gået i stå lige nu, og kan ikke komme videre...
På forhånd tusind tak.