Buongiorno a tutti,
il programma che dovrei realizzare deve creare una lista ordinata in modo decrescente, pian piano che l'utente inserisce i dati. I nodi hanno una struttura chiamata nodo e composta da un nome, un numero reale e ovviamente il puntatore al nodo successivo.
Il pezzo di codice successivo è quello relativo all'inserimento in mezzo alla lista.
p è nodo iniziale
temp è ausiliario, lo uso per memorizzare il dato appena inserito e per scorrere la lista.
Ho inserito un indice (i) e dei debug.
Inserendo come dati:
roma 5
milano 2
Il programma stampa
1 (prima printf per i)
entra qui
... (printf per tutti i passaggi)
entra qui10
1 (nuova printf per i prima che ricominci il ciclo)
Subito dopo crasha. Non capisco dov'è il problema nello scorrere la lista (condizione del while? temp=temp->next; in fondo? qualche indirizzamento sbagliato?)
Grazie mille per l'aiuto che potrete darmi
codice:
temp = (struct nodo*)malloc(sizeof(nodo));
strcpy(temp->nome, buffer);
printf("Inserire il valore di concentrazione di inquinante:\n");
scanf("%lf", &temp->dato);
temp->next=NULL;
if (p==NULL) //se la lista e' vuota
{
p=(struct nodo*)malloc(sizeof(nodo));
strcpy(p->nome, temp->nome);
p->dato=temp->dato;
p->next=NULL;
}
else //se la lista non e' vuota
{
temp->next=p;
i=0;
while (temp->next!=NULL) //finche' non termina la lista
{
i++;
printf("%d\n", i);
printf("entra qui\n");
if (temp->next->dato<temp->dato) //se il nuovo dato e' maggiore dell'attuale massimo
{
printf("entra qui2\n");
nuovo=malloc(sizeof(struct nodo));
strcpy(nuovo->nome,temp->nome);
nuovo->dato=temp->dato;
printf("%lf\n", nuovo->dato);
nuovo->next=p;
temp->next=NULL;
}
else //se invece non e' il massimo
{
printf("entra qui3\n");
nuovo=malloc(sizeof(struct nodo));
printf("entra qui4\n");
strcpy(nuovo->nome,temp->nome);
printf("entra qui5\n");
nuovo->dato=temp->dato;
printf("entra qui6\n");
p->next=nuovo;
printf("entra qui7\n");
nuovo->next=NULL;
printf("entra qui8\n");
temp->next=NULL;
printf("entra qui9\n");
}
temp=temp->next; //scorro la lista verso il prossimo elemento
printf("entra qui10\n");
printf("%d\n", i);
}
Questo è solo un estratto del programma, l'inserimento del primo elemento in testa alla lista vedo che funziona