.dsy:it.
Show 150 posts per page

.dsy:it. (http://www.dsy.it/forum/)
- Algoritmi e strutture dati (http://www.dsy.it/forum/forumdisplay.php?forumid=207)
-- Aiutooooo (http://www.dsy.it/forum/showthread.php?threadid=36266)


Posted by delleroby on 16-09-2008 16:29:

Aiutooooo

Ragazzi mi sono incasinato su una cavolata incredibile....
come faccio a sapere se una lista è vuota???Vi faccio capire
ho usato una lista doppiamente puntata e questa condizione mi incasina tutto.....

if (nuovo->relazioni_colore == NULL)


potete aiutarmi???
cambiare ttt in liste unidirezionali è troppo lungo..
per favore aiuto.....


Posted by loreste on 16-09-2008 16:56:

scusa, se hai una lista bidirezionale o monodirezionale se la lista è vuota vuol dire che la lista è null, non ha senso nelle liste lasciare l'elemento che non contiene nulla....

__________________
La Fede non retrocede mai!
Döma Atalanta!!!!!!!!


Posted by delleroby on 16-09-2008 16:59:

giusto scusa....non mi sn spiegato bene...la lista è relazione_colore...che è contenuta in un'altro oggetto..


Posted by loreste on 16-09-2008 17:13:

non capisco....

hai una lista che si chiama relazione_colore, all'interno che c'è?

Da come vedo io hai una lista che si chiama nuovo, ed al suo interno hai relazione_colore (cosa indica?)

__________________
La Fede non retrocede mai!
Döma Atalanta!!!!!!!!


Posted by delleroby on 16-09-2008 17:30:

no no la lista è relazione_colore l'altro è una struttura diversa.


guarda le operazioni che ho usato per creare e inserire nelle liste sono:

lista_colori *createlist(void)
{
lista_colori *q = malloc(sizeof(lista_colori));

if(!q) {
fprintf(stderr,"Errore di allocazione nella creazione della lista\n");
exit(-1);
};
q->next = q->prev = q;
return q;
}

/* inserisce un elemento in testa alla lista */
void *insert(lista_colori *p,colore *colore_relazione)
{
lista_colori *q = malloc(sizeof(lista_colori));

if(!q) {
fprintf(stderr,"Errore nell'allocazione del nuovo elemento\n");
exit(-1);
};
q->colore_lista = colore_relazione;
q->next = p->next;
p->next->prev = q;
p->next = q;
q->prev = p;
}


come faccio a capire se la lista è vuota?


Posted by loreste on 16-09-2008 18:21:

questa cosa non mi convince...

q->next = q->prev = q;

vuol dire che next e prev puntano entrambe a q.....

io avrei fatto

q->next = q->prev = NULL

devi tenere un puntatore alla testa della lista e ogni elemento va aggiunto alla testa della linea, in questo modo potrai fare

dopo la calloc di q

//questo mi opare di capire che è il dato
q->colore_lista = colore_relazione;
q-> next = testadellalista;
q-> prev = NULL;
testadellalista-> prev = q;
//risistemo la testa della lista
teststadellalista = q;

a questo punto, per sapere se la lista è vuota, devi testare la testa

if (testadellalista == NULL){
listavuota;
}else{
lista piena (ho almeno un elemento
}

__________________
La Fede non retrocede mai!
Döma Atalanta!!!!!!!!


Posted by darkshadow on 16-09-2008 21:54:

mettiamo che ho dichiarato...

lista_colori *_listaColori;

la condizione per sapere se la tua lista è vuota è la seguente:

if ( _listaColori->succ == _listaColori )      printf ("La lista è vuota");

else      printf ("La lista contiene elementi");

cmq se guardi nei vecchi progetti (tra i quali quello che ho fatto io) trovi degli esempi pratici sulle liste.


ciao.


DS

__________________
by Ð@rk§h@ÐØw


Posted by delleroby on 17-09-2008 10:15:

grazie mille a entrambi!!


All times are GMT. The time now is 18:11.
Show all 8 posts from this thread on one page

Powered by: vBulletin Version 2.3.1
Copyright © Jelsoft Enterprises Limited 2000 - 2002.