C, liste doppiamente collegate

di il
35 risposte

35 Risposte - Pagina 3

  • Re: C, liste doppiamente collegate

    Ma non ho detto che non ci credo. Io l'ho ricompilato e non mi da nessun problema.

    davide@davide-HP-G62-Notebook-PC:~/Scrivania$ gcc -o exe sorgente.c
    davide@davide-HP-G62-Notebook-PC:~/Scrivania$ ./exe
    4 -> 3 -> davide@davide-HP-G62-Notebook-PC:~/Scrivania$


    Che compilatore usi?
  • Re: C, liste doppiamente collegate

    L'errore NON è in compilazione. Mi sembrava di essere stato chiaro.

    E' in ESECUZIONE ... ci sono valori di puntatori sballati nella funzione per l'aggiunta dei nodi

    Non so quale codice stai compilando ma è veramente strano che tu non abbia alcun errore in esecuzione.
  • Re: C, liste doppiamente collegate

    A prima vista tu usi

    TipoListaDoppia lista;

    e i suoi elementi first e last SENZA che questi elementi siano inizializzati ... ma DEVI farlo prima impostandoli a NULL

    E non è solo questo l'errore ... infatti anche dentro la funzione la if deve essere

    if(lis->first == NULL)
  • Re: C, liste doppiamente collegate

        #include <stdio.h>
        #include <stdlib.h>
    
        struct ElemListaDoppia{
           
            int info;
            struct ElemListaDoppia *next;
            struct ElemListaDoppia *prev;
        };
    
        typedef struct ElemListaDoppia TipoNodoListaDoppia;
    
        struct RecordListaDoppia{
           
            TipoNodoListaDoppia *first;
            TipoNodoListaDoppia *last;
           
        };
    
        typedef struct RecordListaDoppia TipoListaDoppia;
    
        void addTestaLista(TipoListaDoppia *lis, int e);
    
        int main()
        {
            TipoListaDoppia lista;
           
            int i;
           
            for(i = 0; i < 5; i++)
                addTestaLista(&lista, i);
    
            //Puntatore per stampare
            TipoNodoListaDoppia *p = lista.first;
    
            printf("%d -> ", p -> info);
            p = p -> next;
            printf("%d -> ", p -> info);
    
            //In questo modo mi stampa 4 -> 3 ->, il che è giusto.
            //Vorrei, però, utilizzare un ciclo per la stampa.
    
            //Io ho provato così
            // while(p -> next != NULL)
            //{
            //    printf("%d -> ", p -> info);
            //    p = p -> next;
            //}
    
           //Ma non va. Qual è la condizione giusta da inserire?
        }
    
        void addTestaLista(TipoListaDoppia *lis, int e)
        {
            TipoNodoListaDoppia *aux = (TipoNodoListaDoppia*) malloc (sizeof(TipoNodoListaDoppia));
            aux -> info = e;   
           
            if(lis == NULL)
            {
                aux -> prev = NULL;
                aux -> next = NULL;
                lis -> first = aux;
                lis -> last = aux;
               
                return;
            }
            aux -> prev = NULL;
            aux -> next = lis -> first;
            lis -> first -> prev = aux;
            lis -> first = aux;
           
        }
    Io sto compilando ed eseguendo questo. Che poi, tra l'altro, è preso tale e quale dalle dispensa del prof.


    //Puntatore per stampare
    TipoNodoListaDoppia *p = lista.first;

    printf("%d -> ", p -> info);
    p = p -> next;
    printf("%d -> ", p -> info);

    //In questo modo mi stampa 4 -> 3 ->, il che è giusto.
    //Vorrei, però, utilizzare un ciclo per la stampa.

    //Io ho provato così, ma non funziona!
    // while(p -> next != NULL)
    //{
    // printf("%d -> ", p -> info);
    // p = p -> next;
    //}


    Aldilà di tutto ciò, tralasciando il fatto che si siano errori (mi arrangerò in seguito), come si stampa questa benedetta lista?
  • Re: C, liste doppiamente collegate

    Scusa ma fai sempre le stesse domande senza leggere cosa ti rispondo?

    Rileggi bene le mie ultime 3 risposte.
  • Re: C, liste doppiamente collegate

    oregon ha scritto:


    A prima vista tu usi

    TipoListaDoppia lista;

    e i suoi elementi first e last SENZA che questi elementi siano inizializzati ... ma DEVI farlo prima impostandoli a NULL

    E non è solo questo l'errore ... infatti anche dentro la funzione la if deve essere

    if(lis->first == NULL)
    L'ho visto ora, scusa.

    Grazie
Devi accedere o registrarti per scrivere nel forum
35 risposte