Salve a tutti.
Ho un grosso problema con una lista linkata ordinata. Ci sto sopra da giorni interi.
Il programma deve riceve in input cognome e nome, e deve gia metterli ordinati nella lista.
Il problema è che :
1)dopo il secondo inserimento, la visualizzazione mi fa vedere : lista vuota (quando in realtà dovrebbe farmi vedere primo e secondo inserimento gia ordinati)
2)al terzo inserimento, la visualizzazione mi fa vedere solo il terzo inserimento, e non i primi due.
3)Ripete dal punto 1)
Probabilmente ci deve essere qualche errore logico di implementazione.
Il codice del programma è il seguente :
#include <iostream>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define maxdim 30
typedef
struct {
char cognome[maxdim];
char nome[maxdim];
}E;
struct nodo;
typedef nodo *p;
struct nodo{
E elem;
p next;
};
void inizializza (p *radice)
{
*radice = NULL;
printf ("La lista e' vuota\n\n");
system ("PAUSE");
system ("CLS");
}
void push_testa (p *testa, E e)
{
p nod;
nod = (p)malloc(sizeof(nodo));
strcpy(nod->elem.cognome,e.cognome);
strcpy(nod->elem.nome,e.nome);
nod->next = *testa;
*testa = nod;
}
void push_in_mezzo (p *nod, p *prec, E e)
{
p nuovo_nodo;
nuovo_nodo = (p)malloc(sizeof(nodo));
strcpy(nuovo_nodo->elem.cognome,e.cognome);
strcpy(nuovo_nodo->elem.nome,e.nome);
(*prec)->next = nuovo_nodo;
nuovo_nodo->next = *nod;
}
void insert (p *nod, p *prec, E e)
{
printf ("Cognome : ");
scanf ("%s",&e.cognome);
printf ("Nome : ");
scanf ("%s",&e.nome);
if (*nod!=NULL)
{
while ((*nod!=NULL)&&(strcmp(e.cognome,(*nod)->elem.cognome)>0))
{
*prec = *nod;
*nod = (*nod)->next;
};
if ((*prec!=NULL)&&(*prec==*nod)) push_in_mezzo(nod,prec,e);
}
else push_testa (nod,e);
system ("PAUSE");
system ("CLS");
}
void visualizza (p nod)
{
p nod_aux;
if (nod==NULL)
printf ("Lista vuota\n");
else {
nod_aux = nod;
while (nod_aux!=NULL)
{
printf ("Cognome : %s\n",nod_aux->elem.cognome);
printf ("Nome : %s\n",nod_aux->elem.nome);
nod_aux = nod_aux->next;
}
}
system ("PAUSE");
system ("CLS");
}
int main()
{
p node,preced;
E contatto;
char scelta;
inizializza (&node);
do{
printf ("Menu'\n\n");
printf ("Per inserire : i\n");
printf ("Per visualizzare : v\n");
printf ("Per uscire : u\n");
printf ("Scelta : ");
scanf ("\n%c",&scelta);
if (scelta=='i') insert(&node,&preced,contatto);
if (scelta=='v') visualizza (node);
}while (scelta!='u');
system ("PAUSE");
}
Vi prego aiutatemi. E' un progetto d'esame.
Grazie in anticipo.