PDA

View Full Version : [C] due funzioni per liste circolari.


Capua
14-03-2008, 17:18
Devo scrivere 2 funzioni, una che rende una lista lineare in una circolare, e l'altra che cerca un intero in una lista circolare...
Che errore c'è nelle mie implementazioni?

la lista l'ho definita così:
struct lista {
int elem;
struct lista *next;
};
typedef struct lista lista;

Dopo essermi creato la lista, ecco le mie funzioni:

lista *rendiCircolare(lista *testa){
lista *aux;
aux = testa;
while (aux!=NULL){
aux = aux->next;
}
aux->next = testa;
return (testa);
}

// .............

int cercaintero (lista *testa,int i){
lista *aux;
aux = testa;

if (testa->elem==i) return 1;
else while(aux!=testa){
if (testa->elem==i)
return 1;
else aux=aux->next;
}
return NULL;
}

sapreste individuarmi gli errori? grazie!

Furla
14-03-2008, 19:54
Devo scrivere 2 funzioni, una che rende una lista lineare in una circolare, e l'altra che cerca un intero in una lista circolare...
Che errore c'è nelle mie implementazioni?


prima di tutto quando posti del codice racchiudilo nei tag [ code ] e [ /code ] (senza spazi) in modo da poterlo indentare e facilitare la lettura a chi ti vuole aiutare.

lista *rendiCircolare(lista *testa){
if(!testa) return 0;
lista *aux;
aux = testa;
while (aux->next!=NULL)
aux = aux->next;
aux->next = testa;
return (testa);
}
quando esci dal ciclo il puntatore è già nullo, mentre per funzionare deve puntare all'ultimo elemento. la condizione del loop deve essere posta su aux->next (e prima di entrare devi controllare che la lista non sia vuota).


int cercaintero (lista *testa,int i){
lista *aux;
aux = testa->next;
if (testa->elem==i)
return 1;
else while(aux!=testa)
if (testa->elem==i)
return 1;
else
aux=aux->next;
return NULL;
}

qui esci subito dal ciclo perché inizializzi aux=testa e testi aux!=testa... visto che testi il primo elemento a parte, puoi inizializzare aux in modo che punti subito al secondo (probabilmente era quello che volevi fare)

non li ho testati perché non sono sul pc da programmazione ma così, ad occhio, dovrebbero girare.

Capua
14-03-2008, 23:16
grazie funziona!!!