/ Forside / Teknologi / Udvikling / C/C++ / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
C/C++
#NavnPoint
BertelBra.. 2425
pmbruun 695
Master_of.. 501
jdjespers.. 500
kyllekylle 500
Bech_bb 500
scootergr.. 300
gibson 300
molokyle 287
10  strarup 270
Sortering af liste ??
Fra : Brian Ipsen


Dato : 10-06-01 17:39

Hej!

Jeg skulle gerne have en gang data i memory sorteret.... Mine data
ligger som en hægtet liste, og jeg tror ikke, at jeg kan bruge qsort
på den...

Mine data ser sådan her ud:

struct myStruct {
struct myStruct *msNext;
char   *pszPointerToData;
}

Jeg kan godt indføje en pointer til et tidligere element, hvis det kan
hjælpe:

struct myStruct {
struct myStruct *msPrevious;
struct myStruct *msNext;
char   *pszPointerToData;
}


Men når jeg skal have "skidtet" sorteret på grundlag af det, som
pszPointerTodata peger på, hvad gør jeg så ??

/Brian



 
 
Kent Friis (10-06-2001)
Kommentar
Fra : Kent Friis


Dato : 10-06-01 18:12

Den Sun, 10 Jun 2001 18:39:02 +0200 skrev Brian Ipsen:
>Hej!
>
> Jeg skulle gerne have en gang data i memory sorteret.... Mine data
>ligger som en hægtet liste, og jeg tror ikke, at jeg kan bruge qsort
>på den...
>
>Mine data ser sådan her ud:
>
>struct myStruct {
>struct myStruct *msNext;
>char   *pszPointerToData;
>}
>
>Jeg kan godt indføje en pointer til et tidligere element, hvis det kan
>hjælpe:
>
>struct myStruct {
>struct myStruct *msPrevious;
>struct myStruct *msNext;
>char   *pszPointerToData;
>}
>
>
>Men når jeg skal have "skidtet" sorteret på grundlag af det, som
>pszPointerTodata peger på, hvad gør jeg så ??

Deler listen i to og laver en mergesort?

Mvh
Kent
--
http://www.celebrityshine.com/~kfr/

Mogens Hansen (10-06-2001)
Kommentar
Fra : Mogens Hansen


Dato : 10-06-01 20:01


"Brian Ipsen" <Spammers@blow.me> wrote in message
news:2f87itk048vu0qpgpdqe8p469b69m3a1bg@4ax.com...
> Hej!
>
> Jeg skulle gerne have en gang data i memory sorteret.... Mine data
> ligger som en hægtet liste, og jeg tror ikke, at jeg kan bruge qsort
> på den...

Hvis du kan tillade at bruge C++, så kunne du overveje at bruge "std::list"
som listen, og sortere den med funktionen "std::list::sort".


Venlig hilsen

Mogens Hansen



Soeren Sandmann (10-06-2001)
Kommentar
Fra : Soeren Sandmann


Dato : 10-06-01 20:07

Brian Ipsen <Spammers@blow.me> writes:

> Jeg skulle gerne have en gang data i memory sorteret.... Mine data
> ligger som en hægtet liste, og jeg tror ikke, at jeg kan bruge qsort

Jo, det kan du godt. Lav en pointer-tabel af samme længde som listen,
og gem en pointer til hvert element i en indgang i tabellen. Så kan
du bruge

qsort (array, n_elements, sizeof (void *), compare);

hvor compare() er noget i stil med

int
compare (void *a, void *b)
{
struct myStruct **s1 = a, **s2 = b;

return strcmp ((*s1)->pszPointerToData, (*s2)->pszPpointerToData);
}

Når qsort() er færdig, kan du bygge den hægtede liste op igen og
deallokere tabellen.

Søg
Reklame
Statistik
Spørgsmål : 177552
Tips : 31968
Nyheder : 719565
Indlæg : 6408847
Brugere : 218887

Månedens bedste
Årets bedste
Sidste års bedste