Ciao.
Questo mio programma, fa caricare due LISTE con campo informativo intero.
Gli elementi devono essere inseriti in ordine CRESCENTE in tutte e due le liste.
Io dovrei crearne un'altra , ordinata in ordine decrescente.
Adesso questo mio programma dovrebbe funzionare se le 2 liste hanno lo stesso numero di NODI.
Questo e' il codice, compilandolo non mi da nessun errore, ma eseguendolo, dopo aver caricato le due liste, mi segnala di fare la segnalazione a Windows, perche' si e' verificato un errore.
codice:
#include <iostream>
using namespace std;
struct lista
{
int num;
lista *punt;
};
int main()
{
lista **x,*y,*T1,*T2;
char ins;
cout <<"Inserisci gli elementi nelle 2 LISTE in ordine crescente."<<endl;
cout <<"Verra' creata una contenente i nuemri in ordine DECRESCENTE!.\n"<<endl;
//Caricamento 1° LISTA
lista p; //P TESTA DELLA LISTA 1
cout <<"LISTA 1 - Inserisci il numero = ";
cin >> p.num;
x=&p.punt; //conservo il campo puntatore
cout <<"Devi inserire ? (s/n) = ";
cin >>ins;
if (ins!='s' || ins!='S') // nel caso in cui viene inserito
p.punt=NULL; // solo un nodo
while (ins=='s' || ins=='S')
{
lista *pp = new lista;
cout <<"LISTA 1 - Inserisci il numero = ";
cin >> pp->num;
*x=pp;
x=&pp->punt; //inserimenti in coda alla LISTA
cout <<"Devi inserire ? (s/n) = ";
cin >>ins;
if (ins=='n' || ins=='N')
pp->punt=NULL;
}
// FINE caricamento 1° LISTA
//Caricamento 2° LISTA
lista q; //Q TESTA DELLA LISTA 2
cout <<"LISTA 2 - Inserisci il numero = ";
cin >> q.num;
x=&q.punt; //conservo il campo puntatore
cout <<"Devi inserire ? (s/n) = ";
cin >>ins;
if (ins!='s' || ins!='S') // nel caso in cui viene inserito
q.punt=NULL; // un solo nodo
while (ins=='s' || ins=='S')
{
lista *qq = new lista;
cout <<"LISTA 2 - Inserisci il numero = ";
cin >> qq->num;
*x=qq;
x=&qq->punt; //inserimenti in coda alla LISTA
cout <<"Devi inserire ? (s/n) = ";
cin >>ins;
if (ins=='n' || ins=='N')
qq->punt=NULL;
}
T1=&q; //Assegno T1 come indice al posto di 'q' (T1 = puntatore a LISTA)
T2=&p;
if (p.num >= q.num)
{
lista *coda = new lista; //crea coda della LISTA
coda->num=q.num;
coda->punt=NULL;
T1=T1->punt;
y=coda;
}
else
{
lista *coda = new lista; //crea coda della LISTA
coda->num=p.num;
coda->punt=NULL;
T2=T2->punt;
y=coda;
}
while (T1->punt || T2->punt != NULL)
{
if (T1->num >= T2->num)
{
lista *t = new lista;
t->num = T2->num;
T2=T2->punt;
t->punt=y;
y=t;
}
else
{
lista *t = new lista;
t->num = T1->num;
T1=T1->punt;
t->punt=y;
y=t;
}
}
//STAMPA
lista *TESTA=y;
while(TESTA)
{
cout<<TESTA->num<<endl;;
TESTA=TESTA->punt;
}
system("PAUSE");
}