SHARE
TWEET

Untitled

a guest Oct 23rd, 2019 77 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. typedef int TInfo;
  2.  
  3. //la struttura di una lista è composta da:
  4.  
  5. struct SNode {
  6.     TInfo info; //il valore contenuto da ogni cella/nodo della lista
  7.     struct SNode *link; //un collegamento al valore successivo della lista
  8. };
  9.  
  10. typedef struct SNode TNode;
  11.  
  12. //questo typedef serve solo per semplificare la vita all'utente
  13. //sintatticamente il valore tlist è quello che punta al tnode (gli elementi della lista)
  14. typedef TNode *TList;
  15.  
  16.  
  17. /* Crea ed alloca un nodo
  18.  * PRE: nessuna
  19.  */
  20. TNode *node_create(TInfo value);
  21.  
  22.  
  23. /* Distrugge e dealloca un nodo
  24.  * PRE: nessuna
  25. */
  26. void node_destroy(TNode *node);
  27.  
  28.  
  29. /* Crea e restituisce una lista vuota
  30.  * PRE: nessuna
  31. */
  32. TList list_create();
  33.  
  34. /* Distrugge la lista list , deallocandone tutti gli elementi
  35.  * PRE: nessuna
  36.  * NOTA: consuma il parametro list
  37. */ TList list_destroy(TList list);
  38.  
  39. int main(int argc, char** argv) {
  40.     TList mario;
  41.    
  42.    
  43.     printf("mario");
  44.    
  45.     return (EXIT_SUCCESS);
  46. }
  47.  
  48. TNode *node_create(TInfo value){
  49.    
  50.     TNode new; //inizializziamo una nuova variabile nodo
  51.    
  52.     //allochiamo la memoria necessaria al nodo;
  53.     new=(TNode *) malloc(sizeof(TNode));
  54.     if(new == NULL)
  55.         return NULL;
  56.    
  57.     //inseriamo i valori TInfo e il link al successivo elemento
  58.     new->info=value;
  59.     //visto che è un nuovo nodo, questo punterà a NULL
  60.     new->link=NULL;
  61.    
  62.     //il valore di ritorno è il nuovo nodo creato
  63.     return new;
  64.    
  65.    
  66. }
  67.  
  68. //la funzione è semplice:
  69. //essa deve cancellare il nodo e liberarne la memoria occupata
  70. void node_destroy(TNode *node){
  71.     free(node);
  72. }
  73.  
  74. TList list_create(TList *new){
  75.     return NULL;
  76.    
  77.     //la funzione restituisce una lista nulla.
  78. }
  79.  
  80. TList list_destroy(TList list){
  81.    
  82.     //la funzione deve deallocare e
  83.     //dstruggere interamente gli elemnti della lista
  84.    
  85.     //implementiamo la funzione in maniera ricorsiva
  86.    
  87.     //caso degenere
  88.     if(list == NULL)
  89.         return list;
  90.    
  91.     //caso Base: la lista è composta da un solo elemento e questo punta a NULL
  92.     if(list->link == NULL){
  93.         node_destroy(*list);
  94.         return list;
  95.     }
  96.     else{
  97.         //DIVIDE: se la lista è composta da più elementi
  98.         //richiamiamo la funzione stessa inviandogli quello successivo
  99.        
  100.         //IMPERA
  101.         list=list_destroy(list->link);
  102.         node_destroy(*list);
  103.        
  104.         //COMBINA
  105.         return list;
  106.        
  107.     }    
  108.    
  109.    
  110.    
  111. }
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
 
Top