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

    [C] Lista circolare - visualizzazione

    Salve ragazzi volevo avere maggiori chiarimenti su come poter risolvere un problema che ho con un sottoprogramma riguardo la visualizzazione di una lista circolare.
    ---------------------------------------------------
    void visualizza(struct nodo *l )
    {
    struct nodo *app;
    app=l;
    if(app==NULL)
    printf("\nLISTA VUOTA...\n");
    else{
    if(app->p==app)
    printf("\nIl numero presente in lista e' %d. ",app->info);
    else{
    printf("\nI numeri presenti in lista sono: ");
    do{
    printf("\n\t %d",app->info);
    app=app->p;
    }while(app->p!=app);
    }
    }
    }
    -------------------------------------------------------
    Il problema sussiste nel caso del do{ }while cioè nel caso in cui nella nostra lista ci sia più di un elemento. In pratica mi visualizza tutti gli elementi tranne l'ultimo (che poi nella lista circolare l'ultimo è anche il primo però diciamo l'ultimo rispetto al primo che visualizza).
    Vi sarei grato se mi aiutaste.
    Stefano

  2. #2
    Secondo me, in:

    codice:
    do{
    printf("\n\t %d",app->info);
    app=app->p;
    }while(app->p!=app);
    La condizione del while mi lascia dubbioso....
    Cioè tu hai una cosa del tipo:

    [1]--->[2]--->[3] dove 1 punta a 2, 2 punta a 3 e tre punta a 1 giusto? Ma tra di loro sono diversi no?
    Salute a voi, da Laikius!

    --> Faber est suae quisque fortunae <--

  3. #3
    si praticamente si la situazione è quell adescritta da te. il sottoprogramma visualizza solo 1 e 2 e 3 no.... Come posso risolvere... non riesco a trovare una condizione consona.

  4. #4
    Ma se tu facessi una cosa del genere:

    codice:
    firts = app;
    
    do{
    printf("\n\t %d",app->info);
    app=app->p;
    }while(app!=first);
    ??
    Potrebbe andare?
    Salute a voi, da Laikius!

    --> Faber est suae quisque fortunae <--

  5. #5
    penso proprio che sia la soluzione... adesso controllo...

  6. #6
    scusa non avevo letto bene cosa è first? spiegami cosa significa la condizione... grz

  7. #7
    Originariamente inviato da thecrows
    scusa non avevo letto bene cosa è first? spiegami cosa significa la condizione... grz

    Allora, first non l'ho inizializzato, ma è un "struct nodo*"...
    Io ho ragionato così, supponiamo di avere una lista fatta così:

    codice:
    indirizzo     struct
        ß           [info = 1; p = Ø]
        Ø          [info = 2; p = ƒ]
        ƒ           [info = 3; p = ß]
    Salvo l'indirizzo del primo elemento in firts (quindi salvo in first ß) nel ciclo succede questo:

    1) app = ß (punta al primo elemento);
    2) stampo app->info;
    3) sposto app e ho app = Ø (secondo elemento);
    4) app != first ? Si perchè Ø != ß!
    5) stampo app->info;
    6) sposto app e ho app = ƒ;
    7) app != first? Si perche ƒ != ß;
    8) stampo app->info;
    9) sposto app e ho app = ß;
    10) app != first? No, perche ß == ß!
    11) Esce dal ciclo!

    Che dici può tornare il ragionamento??
    Salute a voi, da Laikius!

    --> Faber est suae quisque fortunae <--

  8. #8
    Xfetto non fa una pecca. Adesso quello che voglio chiedere. Visto che la mia lista che gli passo alla funzione si chiama 'l' invece di dichiarare un altro puntatore di appoggio (in questo caso app2 perche già app l'ho utilizzato), la condizione che mi hai corretto posso anche scriverla così...

    codice:
    do{ 
         printf("\n\t %d",app->info); 
         app=app->p; 
        }while(app!=l);

  9. #9
    Originariamente inviato da thecrows
    Xfetto non fa una pecca. Adesso quello che voglio chiedere. Visto che la mia lista che gli passo alla funzione si chiama 'l' invece di dichiarare un altro puntatore di appoggio (in questo caso app2 perche già app l'ho utilizzato), la condizione che mi hai corretto posso anche scriverla così...

    codice:
    do{ 
         printf("\n\t %d",app->info); 
         app=app->p; 
        }while(app!=l);
    Sisi hai perfettamente ragione, non mi ero accorto che app fosse già una copia di un puntatore "l"!
    Direi ottimo!

    Funziona bene quindi?
    Salute a voi, da Laikius!

    --> Faber est suae quisque fortunae <--

  10. #10
    Sisi funziona bene adesso l'ese mi dà un problema ina ricerca ma ho capito dove ho sbagliato e poi mi si blocca al 3° inserimento del dato "info"

    uff ma che motivo c'è?

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.