Buongiorno, sto imparando a lavorare con le liste e sto facendo un esercizio in cui devo
- Creare Lista
- Stampare
- Inserire in ordine alfabetitco
- Cancellare
Nella fase di inserimento in ordine alfabetico ho dei problemi perchè non riesco ad effettuare correttamente il confronto con il nome una volta effettuata quella del cognome
//FUNZIONE INSERIMENTO ORDINATO IN LISTA
t_lista inserimento_lista(t_lista lista,t_persona persona)
{
t_lista prec,corr,nuovo;
prec=NULL; //Inizio dalla testa
corr=lista;
//--FASE 1-- -> Ricerca della posizione nella quale inserire l'elemento nella lista
printf("\nFASE 1\n");
while(corr != NULL && strcmp(persona.cognome,corr->persona.cognome)>=0)// && strcmp(persona.nome,corr->persona.nome)>=0)
{
printf("\nCerco posizione cognome\n");
prec=corr;
corr=corr->next;
}
if(strcmp(persona.cognome,corr->persona.cognome)==0)
{
while(corr!=NULL && strcmp(persona.nome,corr->persona.cognome)>=0)
{
prec=corr;
corr=corr->next;
}
}
printf("\nPosizione trovata...\n");
//-> Posizione trovata ->
//--FASE 2-- -> Inserimento della 'Persona' in lista tramite 'Allocazione Dinamica della Memoria'
printf("\nFASE 2\n");
nuovo=(t_nodo *)malloc(sizeof(t_nodo));
if(nuovo==NULL)
printf("!ERRORE!");
else
nuovo->persona=persona;
//-> Persona inserita nella lista ->
//--FASE 3-- Aggiornamento delle posizioni
printf("\nFASE 3\n");
if(prec==NULL)//Se siamo in 'Testa'
{
nuovo->next=lista;
lista=nuovo;
return lista;
}
else
{
prec->next=nuovo;
nuovo->next=corr;
return lista;
}
/*//COMMENTATA
if(strcmp(persona.cognome,corr->persona.cognome)==0)
{
printf("\nVerifico cognome uguale...\n");
while(corr!=NULL && strcmp(persona.nome,corr->persona.nome)>=0)
{
printf("\nCerco posizione nome...\n");
prec=corr;
corr=corr->next;
}
}
prec->next=nuovo;
nuovo->next=corr;
*///COMMENTATA
}
Inizialmente avevo scritto la parte alla fine del codice (quella commentata per intenderci) ma poi mi ero reso conto che non effettuava il contollo sull'ordinamento per nome.
Allora ho utilizzato questo tipo di approccio:
while(corr != NULL && strcmp(persona.cognome,corr->persona.cognome)>=0)// && strcmp(persona.nome,corr->persona.nome)>=0)
{
printf("\nCerco posizione cognome\n");
prec=corr;
corr=corr->next;
}
if(strcmp(persona.cognome,corr->persona.cognome)==0)
{
while(corr!=NULL && strcmp(persona.nome,corr->persona.cognome)>=0)
{
prec=corr;
corr=corr->next;
}
}
Una volta che inserisco Cognome e Nome dopo un pò il programma esce.
Dove sbaglio?
Posso effettuare un controllo contemporaneo sia di nome e cognome? (come potete vedere nel primo while c'è una parte di riga di codice commentata)
Spero di essere stato chiaro.
Grazie in anticipo