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

    [C++] Stampare lista concatenata al contrario

    Ho una lista concatenata creata così:

    codice:
    typedef int T;
    typedef struct nodo *pNodo;
    struct nodo
    {
          T elem;
          int i;
          pNodo next;
    };
    inserisco gli elementi in testa, riesco a stampare e tutto, ma come faccio a stampare la lista al contrario? è possibile? questa non è monodirezionale?

    Altro problema: ho una serie di nomi con relativa età in una lista come quella di sopra, tramite una funzione ritorno il puntatore al nodo della persona con età più grande, ora il problema è che quando vado a stampare con "cout << massimo(lista)->eta << " - persona: " << massimo(lista)->nome" mi stampa l'età più grande ma il nome che mi stampa è sempre quello della prima persona che inserisco in lista, perchè!?

    Grazie in anticipo!!

  2. #2

    Re: [C++] Stampare lista concatenata al contrario

    Originariamente inviato da djanthony93
    inserisco gli elementi in testa, riesco a stampare e tutto, ma come faccio a stampare la lista al contrario? è possibile? questa non è monodirezionale?
    Sì, è una lista monodirezionale, per cui è ovviamente più difficile stamparla al contrario; puoi comunque usare un approccio ricorsivo (possibile se gli elementi non sono troppi), oppure puoi copiare tutti gli elementi in un array e poi leggerlo al contrario.
    Altro problema: [...]
    Altro problema => altro thread (e nel nuovo thread posta il codice con cui aggiungi gli elementi alla lista).
    Amaro C++, il gusto pieno dell'undefined behavior.

  3. #3
    Ho provato a stampare la lista al contrario usando sempre i puntatori, c'ho provato ma non va:

    codice:
    pNodo p = lista;
         pNodo testa = lista;
         while(p->next != 0){
                     p->next = lista;
                     lista = lista->next;
                     p = lista;
                     }
         while(p != testa){
                 cout << "\t Elemento: " << p->elem << "\n";
                 p = p->next;
                 }

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Prova l'approccio ricorsivo, come ti è stato suggerito.

    Qualcosa come

    codice:
    void stampa(pNodo curr)
    {
    	if(curr)
    		stampa(curr->next);
    	else
    		return;
    
    	printf("%d\n", curr->elem);
    }
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  5. #5
    Scusa ma non ho capito il codice, potresti spiegarmi come lo devo utilizzare e come funziona? Non ho mai usato così il return

  6. #6
    Il return usato in quel modo fa sì che la funzione esca immediatamente. In ogni caso, si può riscrivere anche senza return:
    codice:
    void stampa(pNodo curr)
    {
        if(curr) // ovvero, if(curr!=NULL)
        {
            stampa(curr->next);
            printf("%d\n", curr->elem);
        }
    }
    Per capire come funziona, prova a "fare finta" di essere il computer ed eseguire questa funzione su una lista con pochi (3 o 4) elementi, vedrai che non è difficile (a patto di avere un minimo di dimestichezza con la ricorsione ).
    Amaro C++, il gusto pieno dell'undefined behavior.

  7. #7
    codice:
    void stampa(pNodo curr)
    {
        if(curr) // ovvero, if(curr!=NULL)
        {
            stampa(curr->next);
            printf("%d\n", curr->elem);
        }
    }
    eh purtroppo non sono pratico con la ricorsione, non ho mai usato una funzione così, vi dispiace spiegarmi meglio? il printf nemmeno l'ho mai usato

  8. #8
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Ma se chiedi "come faccio a stampare" e usi una lista con relativi puntatori, come fai a non sapere usare la printf ?

    Scusa, ma qualsiasi altro discorso è difficile da farsi.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  9. #9
    printf, scanf, mai usate... perchè ti sorprendi? printf nasce col C o col C++? io studio solo C++, e "ricorsione" sia in teoria che in pratica non l'ho mai approfondita, pensa che sulla lista a puntatori è stata dedicata UNA SOLA lezione e sono tra i pochissimi del mio corso a saperla usare

  10. #10
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Sulla ricorsione va bene ... infatti ti è stato detto di studiarla se l'adotti.

    Per la printf, beh, se non fate C ma C++ saprai che si usa la cout per visualizzare dati, no ?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

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.