Pages: [1]   Go Down
Print
Author Topic: Logica liste  (Read 736 times)
0 Members e 1 Utente non registrato stanno visualizzando questa discussione.
Dott.V
Matricola
*
Offline Offline

Posts: 38


« on: 14-02-2014, 13:36:17 »

Ciao ragazzi! Nell'esercizio pubblicato dal prof. Pavone, riguardante le liste, c'è uno stralcio di codice che proprio non riesco a capire. Cioè questo:

Code:
#include<stdio.h>
#include<stdlib.h>


int main() {

   int x=1;

   struct lista {
      int dato;
      struct lista *p;
   } *dati, *new, *tmp;

   dati = NULL;

   printf("Inserisci un numero; -1 per finire\n");
 
/*
   while(x) {
     scanf("%d", &x);
     if (x==-1) break;
*/

   scanf("%d", &x);

   while (x!=-1) {
   //  scanf("%d", &x);
 
     new = (struct lista *) malloc (sizeof(struct lista));
     new->dato = x;
     new->p = NULL;

     if (dati==NULL) dati=new;
     else {
        tmp=dati;
       




         while(tmp->p!=NULL) tmp=tmp->p;                             <-------------Stralcio incriminato
        tmp->p=new;                                                                 <-------------Fino a qui                                           
   


 }


Qualcuno di buon cuore che me lo spieghi semplicemente?



     scanf("%d", &x);

   }
 
   tmp=dati;
   while(tmp!=NULL) {
      printf("%d, ", tmp->dato);
      tmp = tmp->p;
   }   
   printf("\n");

   
 
}








Logged
ɹǝǝuıƃuǝsɹǝʌǝɹ
Administrator
God of the Forum
*****
Offline Offline

Gender: Male
Posts: 4.474


Più grande è la lotta, e più è glorioso il trionfo


WWW
« Reply #1 on: 14-02-2014, 14:52:32 »

Code:
         while(tmp->p!=NULL) tmp=tmp->p;                             <-------------Stralcio incriminato
        tmp->p=new;                                                                 <-------------Fino a qui
Dicesi "inserimento in coda" di una lista concatenata semplice.

Il while la scorre finché si può (cioè finché c'è un successore, che, in tal caso, sarà il nuovo elemento da cui scorrere).
Una volta che non c'è più un successore dell'elemento tmp, si esce dal ciclo while con in tmp il riferimento all'ultimo elemento (coda), a cui si può dunque agganciare il nuovo elemento new tramite la seconda istruzione che vedi, che ovviamente non fa parte del ciclo while.

Sono dell'avviso che qualsiasi blocco di codice che non sia il principale vada inserito in una riga successiva a quella precedente e indentato di uno spazio esteso (tabulazione o 4 spazi vanno vene).
Si vede meglio dove sia il "corpo" di un ciclo. Nel caso del while, avrei scritto equivalentemente:
Code:
         while (tmp->p != NULL)                             <-------------Stralcio incriminato
             tmp=tmp->p;
Ma se è il caso di applicare questa cosa, dovete vedere di avere la maturità di capire da voi stessi.
Logged

La grande marcia della distruzione mentale proseguirà. Tutto verrà negato. Tutto diventerà un credo. È un atteggiamento ragionevole negare l'esistenza delle pietre sulla strada; sarà un dogma religioso affermarla. È una tesi razionale pensare di vivere tutti in un sogno; sarà un esempio di saggezza mistica affermare che siamo tutti svegli. Accenderemo fuochi per testimoniare che due più due fa quattro. Sguaineremo spade per dimostrare che le foglie sono verdi in estate. Non ci resterà quindi che difendere non solo le incredibili virtù e saggezze della vita umana, ma qualcosa di ancora più incredibile: questo immenso, impossibile universo che ci guarda dritto negli occhi. Combatteremo per i prodigi visibili come se fossero invisibili. Guarderemo l'erba e i cieli impossibili con uno strano coraggio. Saremo tra coloro che hanno visto eppure hanno creduto.

In tutto, amare e servire.

  
                            ن                           
I can deal with ads,
I can deal with buffer,
but when ads buffer
I suffer...

...nutrimi, o Signore, "con il pane delle lacrime; dammi, nelle lacrime, copiosa bevanda...

   YouTube 9GAG    anobii  S  Steam T.B.o.I. Wiki [univ] Lezioni private  ʼ  Albo d'Ateneo Unicode 3.0.1
Usa "Search" prima di aprire un post - Scrivi sempre nella sezione giusta - Non spammare - Rispetta gli altri utenti - E ricorda di seguire il Regolamento
Pages: [1]   Go Up
Print
Jump to: