taglio la testa al toro (poverino posto tutto il codice così potete farlo partire...
il programma parte ma se accedo alla funzione merge impazzisce...boh???
codice:
#include <iostream.h>
#include <stdlib.h>
class lista {
lista *succ;
int valore;
public:
lista(void); // costruttore
~lista(void); // distruttore
void crea(lista *pLista, int numero);
void inserimento (lista *pLista);
void elimina(lista *pLista);
void stampa(lista *pLista);
void merge(lista *pLista1, lista *pLista2);
};
/*Dichiarazione funzione leggi*/
int Leggi(void)
{
int numero;
cout << "numero : " ;
cin >> numero;
return numero;
};
/* controlla se si tratta del primo elemento */
bool ListaVuota(lista *pLista)
{
return pLista==NULL;
};
/* Dichiarazione costruttore */
lista::lista(void)
{
succ=NULL;
};
/* Dichiarazione distruttore */
lista::~lista(void)
{
succ=NULL;
};
/* Dichiarazione della funzione membro crea */
void lista::crea(lista *pLista, int numero)
{
pLista=new lista;
while (numero=Leggi())
{
pLista->valore=numero;
pLista->succ=NULL;
}
};
/* Dichiarazione della funzone membro inserimento */
void lista::inserimento (lista *pLista)
{
int numero;
lista *nuovo, *temp,*prec;
crea(nuovo,numero);
if (&ListaVuota)
pLista=nuovo;
else
{
temp=pLista;
while ((temp != NULL)&&(nuovo->valore > temp->valore))
{
prec=temp;
temp=temp->succ;
}
nuovo->succ=temp;
prec->succ=nuovo;
}
};
/* Dichiarazione della funzione elimina */
void lista:: elimina(lista *pLista)
{
lista *temp, *prec;
int dato;
bool trovato;
cout << "Inserire il dato da cancellare: ";
cin >> dato;
if (&ListaVuota)
cout << "Errore: la lista è vuota!!!" << endl << endl;
else
{
trovato=false;
prec=NULL;
temp=pLista;
if (pLista->valore=dato)
{
pLista=pLista->succ;
delete temp;
trovato=true;
}
else
while ((!trovato)&&(temp!=NULL))
{
if (temp->valore=dato)
{
trovato=true;
prec->succ=temp->succ;
delete temp;
}
else
{
prec=temp;
temp=temp->succ;
}
if (!trovato)
cout << "Il dato richiesto non esiste!" << endl << endl;
}
}
};
/* dichiarazione della funzione membro stampa */
void lista::stampa(lista *pLista)
{
lista *temp;
cout << " ---------- ELENCO COMPLETO ---------- " << endl << endl;
temp=pLista;
while (temp!=NULL)
{
cout << temp->valore;
temp=temp->succ;
}
cout << " ------------------------------------- " << endl << endl;
};
/* dichiarazione delle funzione membro merge */
void lista::merge(lista *pLista1, lista *pLista2)
{
lista *unione,*temp1,*temp2;
temp1=pLista1;
temp2=temp1->succ;
cout <<"a"<<endl;
while ((temp1)&&(temp2))
{
if ((&temp2->valore)>(&temp1->valore))
{
unione=temp1;
cout << "d" <<endl;
temp1=temp1->succ;
cout << "e"<<endl;
}
else
{
cout <<"c" <<endl;
unione=temp2;
temp2=temp2->succ;
}
}
if (!temp1)
{
while (temp2)
{
unione=temp2;
temp2=temp2->succ;
}
}
else
{
while (temp1)
{
unione=temp1;
temp1=temp1->succ;
}
}
};
int main()
{
lista *primo,*secondo,*unione;
bool finito=false;
int scelta;
cout << " Implementa gli elementi della prima lista " << endl
<< " 0 per terminare: " << endl << endl;
primo->inserimento(primo);
system("CLS");
cout <<" Implementa gli elementi della seconda lista " << endl
<< " 0 per terminare: " << endl << endl;
secondo->inserimento(secondo);
system ("CLS");
cout << "1- Inserimento" << endl
<< "2- Cancellazione" << endl
<< "3- Fusione" << endl
<< "4- Fine" << endl << endl
<< "Scelta: ";
cin >> scelta;
switch (scelta)
{
case 1:
/*merge*/
unione->merge(primo,secondo);
unione->inserimento(unione);
break;
case 2:
unione->merge(primo,secondo);
unione->elimina(unione);
break;
case 3:
unione->merge(primo,secondo);
unione->stampa(unione);
break;
case 4:
exit(8);
}
system("PAUSE");
return 0;
}