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"); }

Rispondi quotando
), infatti ho difficoltà a capire quali sono le tue intenzioni in alcuni passaggi. Perchè se utilizzi più volte il caricamento di una lista non crei una funzione apposita e la richiami ogni volta che ne hai bisogno, così oltre risparmiare tempo miglioreresti anche la leggibilità del codice.