Avatar billede phbecker Nybegynder
16. marts 2005 - 21:02 Der er 6 kommentarer og
1 løsning

Linked list til array samt sortering/randomisation

Jeg vil gerne udvide min forståelse af linked lists (dermed ikke sagt, at den er synderligt omfattende nu), og tænkte, det kunne være en god ide at finde ud af, hvordan man laver en linked list om til et array og vice versa.

Min struct ser således ud: (se evt. http://www.eksperten.dk/spm/600200 for mere)

struct node
{
    char* name;
    int grade;
    struct node* next;
    struct node* previous;
};

Min tanke er, at konverteringen til array og omvendt vil være mest praktisk, hvis man laver et array af pointere, frem for et array af node-elementer, men jeg er lidt i tvivl om, hvordan man bedst griber det an?

For at udnytte konversionen begge veje (både linked list til array og arra til linked list) tænkte jeg, at man kunne prøve at blande nodes så en f.eks. sorteret linked list ikke længere er sorteret. Har C en funktion til noget "random"-lignende noget, og hvordan kunne man bruge et array af sådanne pointere med den, hvis det kan lade sig gøre og findes?

Når det så er klaret, ville jeg sætte stor pris på lidt hjælp til at bruge C-funktionen qsort (med quicksort-algoritmen) i forbindelse med et sådant array.

På forhånd mange tusind tak! :-)
Avatar billede arne_v Ekspert
16. marts 2005 - 21:09 #1
linked list -> array

må være en while løkke som starter med first og smider over i arrayet,
tæller array index op og går til next
Avatar billede arne_v Ekspert
16. marts 2005 - 21:09 #2
array -> linked list

må være at du starter med en tom liste og så lader du en for løkke
løbe gennem arrayet og tilføje hvert element til listen
Avatar billede arne_v Ekspert
16. marts 2005 - 21:10 #3
rand() returnerer et tilfældigt tal

srand(time(NULL));

kan bruges til at randomisere rand() med
Avatar billede arne_v Ekspert
16. marts 2005 - 21:11 #4
det her er hvad jeg har lager om qsort:

#include <stdlib.h>

#include <iostream>

using namespace std;

struct mys {
  int a;
  int b;
};

int sorta(const void *s1,const void *s2)
{
  return (((mys *)s1)->a - ((mys *)s2)->a);
}

int sortb(const void *s1,const void *s2)
{
  return (((mys *)s1)->b - ((mys *)s2)->b);
}

int main()
{
  struct mys x[3];
  x[0].a=1;
  x[0].b=3;
  x[1].a=2;
  x[1].b=2;
  x[2].a=3;
  x[2].b=1;
  qsort(x,3,sizeof(mys),sorta);
  for(int i=0;i<3;i++) cout << x[i].a << " " << x[i].b << endl;
  qsort(x,3,sizeof(mys),sortb);
  for(int i=0;i<3;i++) cout << x[i].a << " " << x[i].b << endl;
}
Avatar billede phbecker Nybegynder
16. marts 2005 - 23:52 #5
Takker!

Så...

void toarray(int numgrades, struct node *node, struct node *LLarray[25])
{
    int index = 0;
    while(node) // Here we add the rest of the grades
    {
        LLarray[index] = node;
        node = node->next;
        index++;
    }
}

...Bliver kaldt med argumentet LLarray, som er erklæret sådan her:

struct node *LLarray[25];

Kunne denne funktion ses som et array af pointers, eller blot et array af structs?
Avatar billede arne_v Ekspert
18. marts 2005 - 21:49 #6
array af pointers
Avatar billede arne_v Ekspert
18. marts 2005 - 21:50 #7
og et svar
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester