PDA

View Full Version : [C] Funzione inserimento


danny2005
31-03-2006, 10:14
Devo inserire la struttura:

struct elemento {

char cognome[20];

int num_servizi;

struct elemento *next;

};

in una lista ordinata per cognome; la funzione controlla se è già presente l'elemento: se esiste incrementa la variabile num_servizi, altrimenti lo inserisce nella giusta posizione; ecco la funzione:

void in_lista_ordinata(struct elemento **head, struct elemento ** element)

{
struct elemento *prec, *curr;
prec=NULL;
curr=*head;

while(curr != NULL && strcmp(curr->cognome, *element->cognome) <=0)
{
if(strcmp(curr->cognome, *element->cognome)=0)
(curr->num_servizi)++;
else
{ prec=curr;
curr=curr->next;
}
}
if(prec=NULL)
{
*element->next= *head;
*head= *element;
}
else
{
prec->next= *element;
*element->next= curr;
}

}

Pareri?

sottovento
31-03-2006, 10:45
Devo inserire la struttura:

struct elemento {

char cognome[20];

int num_servizi;

struct elemento *next;

};

in una lista ordinata per cognome; la funzione controlla se è già presente l'elemento: se esiste incrementa la variabile num_servizi, altrimenti lo inserisce nella giusta posizione; ecco la funzione:

void in_lista_ordinata(struct elemento **head, struct elemento ** element)

{
struct elemento *prec, *curr;
prec=NULL;
curr=*head;

while(curr != NULL && strcmp(curr->cognome, *element->cognome) <=0)
{
if(strcmp(curr->cognome, *element->cognome)=0)
(curr->num_servizi)++;
else
{ prec=curr;
curr=curr->next;
}
}
if(prec=NULL)
{
*element->next= *head;
*head= *element;
}
else
{
prec->next= *element;
*element->next= curr;
}

}

Pareri?

Tutto in ordine, tranne una piccola cosa:
if(strcmp(curr->cognome, *element->cognome)=0)

(deve essere ==, ovviamente).

sottovento
31-03-2006, 10:46
dimenticavo: vale anche per
if(prec=NULL)

danny2005
31-03-2006, 11:04
hai ragione; nello scriverla sul foglio ho scritto giusto; nel copiarla qui ho ciccato 2 = ;
e si sa che questo è un errore da niubbi, confondere l'uguaglianza con l'assegnamento...

Grazie del parere :p

sottovento
31-03-2006, 11:17
Fai attenzione ad un'altra cosa: secondo lo standard (ammesso che la memoria non inganni), l'operatore di accesso dereferenziato ha priorita' maggiore rispetto all'operatore di dereferenziazione!

In pratica:
*element->next= *head;
puo' darti problemi. Per evitarli, scrivi
(*element)->next= *head;

(ovviamente in tutti i punti del programma)

High Flying
Sottovento

danny2005
31-03-2006, 11:29
Credo che la memoria non ti inganni e un pò di parentesi in più non hanno mai ucciso nessuno :p