Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 12
  1. #1

    [C++] Merge sort per lista

    codice:
    void mergeSort(pNodo lista, pNodo lista2, pNodo &lista3)
    {
         while(lista && lista2){
                     if(strcmp(lista->cognome, lista2->cognome) > 0) push(lista3, lista->nome, lista->cognome);
                     else push(lista3, lista2->nome, lista2->cognome);
                     }
         while(lista){
                      push(lista3, lista->nome, lista->cognome);
                      }
         while(lista2){
                       push(lista3, lista2->nome, lista2->cognome);
                       }
    }
    Ho due liste da fondere rispettando l'ordine alfabetico dei cognomi, "push" inserisce in testa, lista3 è la nuova lista. Il programma non crasha ma mi dà un messaggio alla fine che non riesco a leggere perchè subito si chiude. Per la funzione del merge sort ho seguito passo passo quella che uso per gli array (che funziona), ma come ho scritto dà un problema, potete aiutarmi?
    Grazie in anticipo

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,466
    "Un problema" è troppo generico ... cosa succede?

    E il main ?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    MAIN:
    codice:
    int main(int argc, char *argv[])
    {
        system("color F2");
        stringa nome, cognome;
        int i = 0, k = 0;
        
        cout << "\t\t - LISTA 1 - \n\n";
        pNodo lista = creaLista(); pNodo lista2 = creaLista(); pNodo lista3 = creaLista();
        while(i < 3){
                cout << "\t Inserisci nome: ";
                cin >> nome;
                cout << "\t Inserisci cognome: ";
                cin >> cognome;
                push(lista, nome, cognome);
                i++;
                }
        cout << "\t\t - LISTA 2 - \n\n";
        while(k < 4){
                cout << "\t Inserisci nome: ";
                cin >> nome;
                cout << "\t Inserisci cognome: ";
                cin >> cognome;
                push(lista2, nome, cognome);
                k++;
                }
        sortLista(lista); sortLista(lista2);
        mergeSort(lista, lista2, lista3);
        stampaLista(lista3);
        cout << "\t ";
        system("PAUSE");
        return EXIT_SUCCESS;
    }
    sortLista ordina gli elementi in base al cognome.

    MERGESORT:
    codice:
    void mergeSort(pNodo lista, pNodo lista2, pNodo &lista3)
    {
         while(lista && lista2){
                     if(strcmp(lista->cognome, lista2->cognome) > 0) push(lista3, lista->nome, lista->cognome);
                     else push(lista3, lista2->nome, lista2->cognome);
                     }
         while(lista){
                      push(lista3, lista->nome, lista->cognome);
                      }
         while(lista2){
                       push(lista3, lista2->nome, lista2->cognome);
                       }
    }
    Per il "problema" ho detto che quando arriva ad eseguire il mergeSort compare una scritta che non riesco a leggere perchè subito si chiude, ma non crasha

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,466
    Mi dispiace non darti un aiuto ma finché non posti tutto quello che serve per compilare il tuo codice non posso sapere se il problema sta nella push, nella dichiarazione della struct o chissà dove ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  5. #5

  6. #6
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,466
    Ma nella mergeSort quei cicli quando si concludono? E come vanno avanti ...?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  7. #7
    Il primo finisce quando lista e lista2 sono uguali a NULL, gli altri due anche

  8. #8
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,466
    Peccato che nei cicli lista e lista2 non sono mai modificati da nulla ... quindi, come ci dovrebbero diventare NULL ?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  9. #9
    O.O Mi sono scordato proprio! Adesso modifico subito:

    codice:
    void mergeSort(pNodo lista, pNodo lista2, pNodo &lista3)
    {
         while(lista && lista2){
                     if(strcmp(lista->cognome, lista2->cognome) > 0) push(lista3, lista->nome, lista->cognome);
                     else push(lista3, lista2->nome, lista2->cognome);
                     lista = lista->next; lista2 = lista2->next;
                     }
         while(lista){
                      push(lista3, lista->nome, lista->cognome);
                      lista = lista->next;
                      }
         while(lista2){
                       push(lista3, lista2->nome, lista2->cognome);
                       lista2 = lista2->next;
                       }
    }
    la lista3 non viene riempita di tutti i nomi ma solo di alcuni...

  10. #10
    up

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.