Visualizzazione dei risultati da 1 a 6 su 6

Hybrid View

  1. #1
    Utente di HTML.it L'avatar di Scara95
    Registrato dal
    Jul 2009
    residenza
    Zimella (VR)
    Messaggi
    2,589
    codice:
                 pNodo->next = *l; //salvo il vecchio nodo testa
                *l = pNodo; //valorizzo il nodo testa con il nuovo nodo inserito
                (*l)->next = pNodo; //collego il nuovo nodo testa con il vecchio
    Stai creando un ciclo: pNodo punterà sempre e solo a pNodo e perderai il resto della lista.
    codice:
                if(strcmp(prodotto.codP, pCorrente->info.codP) < 0){//inserimento non in coda alla lista
    Non è vero perché tecnicamente potrebbe essere <= (anche se non nel tuo caso)

    Puoi cambiare questo blocco di codice
    codice:
    while (pCorrente->next != NULL && strcmp(prodotto.codP, pCorrente->info.codP) > 0){//scansiono la lista finchè il nodo corrente punta ad un elemento non NULL e finchè il prodotto da inserire non ha un codice prodotto inferiore a quello del nodo corrente
                    printf("\nEntrato4\n");
                    pPrec = pCorrente;
                    pCorrente = pCorrente->next;//assegno a pCorrente il riferimento del nodo successivo
                }
                /* concatenazione del nuovo record */
                if(strcmp(prodotto.codP, pCorrente->info.codP) < 0){//inserimento non in coda alla lista
                    printf("\nEntrato5\n");
                    pNodo->next = pCorrente;//collegamento tra il nuovo nodo e il suo successivo
                    pPrec->next = pNodo;//collegamento tra il nodo precedente e quello nuovo
                }
                else if(pCorrente->next == NULL) {//inserimento in coda alla lista
                    printf("\nEntrato6\n");
                    pCorrente->next = pNodo;//collegamento della coda della lista al nuovo nodo
                }
    con questo molto più semplice
    codice:
    while (pCorrente != NULL && strcmp(prodotto.codP, pCorrente->info.codP) > 0){
                    pPrec = pCorrente;
                    pCorrente = pCorrente->next;//assegno a pCorrente il riferimento del nodo successivo
                }
                pNodo->next = pCorrente;//collegamento tra il nuovo nodo e il suo successivo
                pPrec->next = pNodo;//collegamento tra il nodo precedente e quello nuovo
    "Quid enim est, quod contra vim sine vi fieri possit?" - Cicerone, Ad Familiares

  2. #2
    Utente di HTML.it
    Registrato dal
    Aug 2011
    Messaggi
    144
    Ciao Scara95 e grazie per aver risposto.


    Quote Originariamente inviata da Scara95 Visualizza il messaggio
    codice:
                 pNodo->next = *l; //salvo il vecchio nodo testa
                *l = pNodo; //valorizzo il nodo testa con il nuovo nodo inserito
                (*l)->next = pNodo; //collego il nuovo nodo testa con il vecchio
    Stai creando un ciclo: pNodo punterà sempre e solo a pNodo e perderai il resto della lista.

    Su questo pezzo di codice non mi sono soffermato perchè nel mio caso non viene mai eseguito. Se ho capito correttamente, stai dicendo che con l'istruzione *l = pNodo perderò il riferimento del puntatore testa, il quale invece punterà a pNodo, dico bene?
    Ma allora posso correggere scrivendo


    codice:
    pNodo->next = *l;
    (*l)->info = prodotto;
    (*l)->next = pNodo;

    ?


    Per il resto è tutto chiaro.
    Ultima modifica di mbistato; 02-01-2018 a 12:45

  3. #3
    Utente di HTML.it L'avatar di Scara95
    Registrato dal
    Jul 2009
    residenza
    Zimella (VR)
    Messaggi
    2,589
    No, sto dicendo che pNodo->next punterà a pNodo e quindi creerai un ciclo infinito.
    "Quid enim est, quod contra vim sine vi fieri possit?" - Cicerone, Ad Familiares

  4. #4
    Utente di HTML.it
    Registrato dal
    Aug 2011
    Messaggi
    144
    Ho sostituito questo codice
    codice:
    pNodo->next = *l; //salvo il vecchio nodo testa
    *l = pNodo; //valorizzo il nodo testa con il nuovo nodo inserito
    			(*l)->next = pNodo;//collego il nuovo nodo testa con il vecchio
    con questo

    codice:
    pNodo->next = *l;
    (*l)->info = prodotto;
    (*l)->next = pNodo;
    Inoltre, apportando le altre modifiche da te suggerite il programma va in crash al secondo ciclo while e pCorrente non viene correttamente inizializzato con il nodo testa tramite l'istruzione pCorrente = *l;

Tag per questa discussione

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