ecco il codice di quello che ho scritto: in pratica io chiedo i dati poi chiamo la funzione ins_ord passandogli come argomento i dati da inserire e la testa della lista..
Codice: Seleziona tutto
int ins_ordinato(NODO * &head,char nome[],char albumname[],int year,float prez,traccia trackname[],int ntracce) //sono i dati di un album musicale
//il tipo traccia è semplicemente un vettore di caratteri
{
NODO *t;
NODO *p;
NODO *prec;
int i;
t= new NODO;
if (t== NULL)
{
cout<<"Memoria esaurita"<<endl;
return 1;
}
strcpy (t->disco.alias,nome);
strcpy (t->disco.nome_album, albumname);
t->disco.n=ntracce;
t->disco.prezzo=prez;
t->disco.anno=year;
for (i=0;i<ntracce;i++)
{
strcpy(t->disco.nome_traccia[i],trackname[i]);
}
//verifica della presenza di elementi nella lista
if (head == NULL);
{
head=t;
t->next=NULL;
return 0;
}
//lista non vuota
//cambio della testa
if ( strcmp(albumname, head->disco.nome_album)<0)
{
t->next= head;
head=t;
return 0;
}
/* se 2 dischi hanno lo stesso nome controlla l'autore: se è lo
stesso segnala l'eventuale doppione, altrimenti li
ordina in base al nome dell'autore*/
if ( strcmp(albumname, head->disco.nome_album)==0)
{
if (strcmp(nome,t->disco.alias)==0)
{
delete t;
cout<< " Dati già inseriti"<<endl;
return 0;
}
if (strcmp(nome,t->disco.alias)<0)
{
t->next=p;
prec->next=t;
return 0;
}
}
// se la lista contiene un solo elemento
if (head->next==NULL)
{
head->next=t;
t->next=NULL;
return 0;
}
//lista con più elementi
prec=head;
p=head->next;
while (p!=NULL)
{
if (strcmp(albumname, p->disco.nome_album)<0)
{
t->next=p;
prec->next=t;
return 0;
}
/* se 2 dischi hanno lo stesso nome controlla l'autore: se è lo
stesso segnala l'eventuale doppione, altrimenti li
ordina in base al nome dell'autore*/
if ( strcmp(albumname, p->disco.nome_album)==0)
{
if (strcmp(nome,t->disco.alias)==0)
{
delete t;
cout<< " Dati già inseriti"<<endl;
return 0;
}
if (strcmp(nome,t->disco.alias)<0)
{
t->next=p;
prec->next=t;
return 0;
}
}
p=p->next;
prec=prec->next;
}
prec->next=t;
t->next= NULL;
return 0;
}grazie a tutti in ogni caso..
