struktury w listach

0

załóżmy że buduję listę ze struktur jak:

struct data
{
float x;
float y;
};

TList *dane;

to jak się potem odwołać do pola x w Liscie,
bo tak:

suma+=* (float*) dane->Items[i];

to na pewno nie

czy można w ogóle budować listę ze struktur, no i jeżeli tak to jak trafić potem na określone pole?

0

Niewiem o co dokładnie Ci chodzi, ale może ten kod Ci coś pomoże:

struct data
{
float x;
float y;
};

struct List
{
data dane;
List* next;
List* prev;
};

gdzie next to wskaźnik do następnego elementu tablicy, a prev do poprzedniego
a dane to są te konkretne wartości, które chcesz przechowywać w tej liście

tworzysz listę:

List Lista;

a odwołujesz się do elementu w ten sposób:

Lista.dane.x lub Lista.dane.y

chyba o to Ci chodzi?

1

Nie mam zielonego pojecia jak sie uzywa TList... nigdy nie lubilem gotowcow -_-....

A co do list to ja zazwyczaj robie tak (to jest TYLKO imho)
( zadnego sprawdzania bledow nie implementowalem! )

#include<stdio.h>

typedef struct element_listy_def
{
struct element_listy_def *nastepny;
struct element_listy_def *poprzedni;
void *dane;
} element_listy;

element_listy *poczatek, *koniec, *obecny;
int liczba_elementow;

inline void lista_poczatek( void )
{
obecny = poczatek;
}

inline void lista_koniec( void )
{
obecny = koniec;
}

int lista_poprzedni( void )
{
if( !obecny->poprzedni ) return 0;
obecny = obecny->poprzedni;
return 1;
}

int lista_nastepny( void )
{
if( !obecny->nastepny ) return 0;
obecny = obecny->nastepny;
return 1;
}

void* lista_dane( void )
{
return obecny->dane;
}

void lista_dodaj( void* nowe )
{
element_listy nasz_nowy = (element_listy)malloc(sizeof(element_listy));
nasz_nowy->dane = nowe;
nasz_nowy->nastepny = NULL;
nasz_nowy->poprzedni = koniec;
if( koniec )
{
koniec->nastepny = nasz_nowy;

}
else
{
poczatek = nasz_nowy;
}
koniec = nasz_nowy;
}

typedef struct costam_def
{
int a;
float b;
} costam;

int main( void )
{
int i;
costam *asdf;
void *xxx; // a moze sie przyda

/* uzupelniamy liste /
for( i = 0; i < 100; i++ )
{
asdf = (costam
) malloc( sizeof( costam ) );
asdf->a = i;
asdf->b = i * 10.0f / 25.0f;
lista_dodaj( asdf );
}

/* listujemy od poczatku /
lista_poczatek( );
do
{
/
ciebie TO interesuje /
asdf = (costam
) lista_dane( );
printf( "[%i] %f\n", asdf->a, asdf->b );
}
while( lista_nastepny( ) );

/* czyscimy liste /
lista_poczatek( );
while( 1 )
{
if( !obecny) break;
free( obecny->dane );
xxx = (void
) obecny;
obecny = obecny->nastepny;
free( xxx );
}

}

ofc lista jest niekompleta... ale dziala =^^=, pozdrawiam

1 użytkowników online, w tym zalogowanych: 0, gości: 1