Dubbio su liste in c

di il
2 risposte

Dubbio su liste in c

Buonasera,
Per portarmi avanti con il programma scolastico stavo cercando di imparare autonomamente le liste, anche perchè è un argomento che mi interessa particolarmente. Dopo aver studiato le prime parti di teoria ho creato con calma un programma. L'unico problema che sembra avere, anche se non importante ai fini di ciò che voglio ottenere, è che se volessi stampare i numeri della lista e non solo operarci sopra (ordinarli con un quick sort/ farci la media) essi vengono stampati "al contrario", probabilmente per via della natura stessa della lista da me creata. Come potrei fare, se volessi creare invece una lista che funzioni poi in logica FIFO?
Esempio:
inserisco 1, 2, 3, 4 e 5
l'output del printf è 5, 4, 3, 2, 1
vorrei: 1, 2, 3, 4, 5
Grazie a tutti!
Codice:

      do {
               p2 = (data *) malloc (sizeof(data));
               printf("\nInsert the integer here [0 to stop the insertion]: ");
               scanf("%d",&p2->info);
               p2->next = p1;
               p1 = p2;
      }while((p2->info) != 0);  
      
      while(p2 != NULL) {
               if((p2->info)!=0) {
                   printf("%d ",p2->info);
                   fwrite(&p2->info,sizeof(int),1,fp);
               }
               p2 = p2->next;
      }        
 

2 Risposte

  • Re: Dubbio su liste in c

    La soluzione e' BANALE:

    per come hai scritto il codice, la tua lista cresce nel seguente modo (la sintassi usata e' quella di Python, che supporta le liste in modo nativo):
    
    L = []
    L = [N1]
    L = [N2, N1]
    L = [N3, N2, N1]
    
    INVECE tu la devi far evolvere nel seguente modo:
    
    L = []
    L = [N1]
    L = [N1, N2]
    L = [N1, N2, N3]
    
    Cioe', invece di inserire i nuovi nodi IN TESTA alla lista, li devi inserire IN CODA.

    Altro informazione:

    la tua lista e' una lista semplice/semplicemente collegata, perche' ogni nodo ha SOLO un link al NODO SUCCESSIVO.
    Questo implica che puoi navigare la lista SOLO dalla testa alla coda..

    Invece puoi implementare la lista in modo che ogni nodo abbia un link al NODO PRECEDENTE ed uno al NODO SUCCESSIVO (lista doppiamente collegata). In questo modo puoi navigare la lista IN ENTRAMBE LE DIREZIONI.

    Altra cosa che devi implementare e': ma se tu volessi inserire un nodo IN MEZZO alla lista, non solo in testa o in coda?
  • Re: Dubbio su liste in c

    migliorabile ha scritto:


    La soluzione e' BANALE:

    per come hai scritto il codice, la tua lista cresce nel seguente modo (la sintassi usata e' quella di Python, che supporta le liste in modo nativo):
    
    L = []
    L = [N1]
    L = [N2, N1]
    L = [N3, N2, N1]
    
    INVECE tu la devi far evolvere nel seguente modo:
    
    L = []
    L = [N1]
    L = [N1, N2]
    L = [N1, N2, N3]
    
    Cioe', invece di inserire i nuovi nodi IN TESTA alla lista, li devi inserire IN CODA.

    Altro informazione:

    la tua lista e' una lista semplice/semplicemente collegata, perche' ogni nodo ha SOLO un link al NODO SUCCESSIVO.
    Questo implica che puoi navigare la lista SOLO dalla testa alla coda..

    Invece puoi implementare la lista in modo che ogni nodo abbia un link al NODO PRECEDENTE ed uno al NODO SUCCESSIVO (lista doppiamente collegata). In questo modo puoi navigare la lista IN ENTRAMBE LE DIREZIONI.

    Altra cosa che devi implementare e': ma se tu volessi inserire un nodo IN MEZZO alla lista, non solo in testa o in coda?
    Davvero interessante, credo di aver capito ambo i concetti, ora tocca solo ingegnarsi per arrivare alla soluzione senza scopiazzare in giro! Quindi ti ringrazio per avermi dato una soluzione "mentale" e non pappa pronta.
    Purtroppo il libro che uso non è molto chiaro a mio parere su questo argomento, quindi ho avuto qualche difficoltà inziale.
    Grazie mille e buona serata
Devi accedere o registrarti per scrivere nel forum
2 risposte