Visualizzazione dei risultati da 1 a 7 su 7
  1. #1

    [C++] Inserimento in lista concatenata

    codice:
    void inserisciInLista(pNodo &lista, stringa nome, stringa cognome)
    {
         pNodo p = new nodo; pNodo prec = lista, curr = lista;
         strcpy(p->nome, nome);
         strcpy(p->cognome, cognome);
         while(strcmp(nome, curr->nome) > 0){
                                  prec = curr;
                                  curr = curr->next;
                                  }
         p->next = curr;
         prec->next = p;
         cout << "\t Nome inserito! \n\n";
    }
    Ho una lista concatenata di nomi e cognomi, ordinata alfabeticamente, questa funzione mi inserisce in lista una nuova persona rispettando l'ordine alfabetico. Come si capisce funziona solo se il nome viene inserito all'interno della lista, infatti se provo ad inserire un nome in testa o in coda, o crasha oppure quando faccio stampare la lista mi stampa il nuovo nome inserito in testa e quello che prima era in testa continuamente.
    Devo giustamente dividere le tre condizioni di inserimento, ho provato ma non mi funziona, riuscite a darmi qualche suggerimento? Grazie in anticipo!

  2. #2
    EDIT: non riesco a inserire in coda, il resto và

  3. #3
    Utente di HTML.it
    Registrato dal
    Jul 2008
    Messaggi
    1,326
    Qui c'è sicuramente un errore

    codice:
         while(strcmp(nome, curr->nome) > 0){
                                  prec = curr;
                                  curr = curr->next;
                                  }
    cosa succede quando, con il progressivo aggiornamento di curr, questo diventa NULL per il raggiungimento della coda? La dereferenziazione "curr->nome" non è più lecita e il programma crasha.

    Prova a modificare così:

    codice:
         while(curr && strcmp(nome, curr->nome) > 0){
                                  prec = curr;
                                  curr = curr->next;
                                  }
    every day above ground is a good one

  4. #4
    provato ma non và, crasha comunque

  5. #5
    Utente di HTML.it
    Registrato dal
    Jul 2008
    Messaggi
    1,326
    A questo punto, posta tutto il codice se non è estremamente lungo.
    every day above ground is a good one

  6. #6
    Questa è tutta la funzione:

    codice:
    void inserisciInLista(pNodo &lista, stringa nome, stringa cognome)
    {
         pNodo p = new nodo; pNodo prec = lista, curr = lista;
         strcpy(p->nome, nome);
         strcpy(p->cognome, cognome);
         while(curr && strcmp(nome, curr->nome) > 0){
                                  prec = curr;
                                  curr = curr->next;
                                  }
         p->next = curr;
         if(strcmp(p->next->nome, curr->nome) == 0) lista = p;
         else prec->next = p;
         cout << "\t Nome inserito! \n\n";
    }
    ho aggiunto un if per l'inserimento in testa

  7. #7
    Utente di HTML.it
    Registrato dal
    Jul 2008
    Messaggi
    1,326
    La riga

    codice:
         if(strcmp(p->next->nome, curr->nome) == 0) lista = p;
    nel codice precedente non c'era ed è ovviamente anche questa causa di problemi nel caso in cui "curr" sia NULL: non soltanto provi ad accedere al campo "nome" di curr ma anche al campo "nome" di p->next che nell'istruzione subito precedente è impostato proprio al valore di curr.
    every day above ground is a good one

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 © 2025 vBulletin Solutions, Inc. All rights reserved.