AleksandarArkan

L-elimina dalla lista i non divisori di N

Apr 16th, 2015
228
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.01 KB | None | 0 0
  1. /*Scrivere un programma che accetti in ingresso una sequenza di valori interi
  2.  * terminante con zero e la memorizzi in una lista lineare, successivamente
  3.  * eliminare dalla lista creata quelli che non sono divisori di n, dove n
  4.  * e' un numero intero passato in ingresso dall'utente */
  5.  
  6.  #include <stdio.h>
  7.  #include <stdlib.h>
  8.  
  9.  
  10.  //funzione crea lista, che termina con l'inserimento dello zero
  11.  struct elemento {
  12.      int num;
  13.      struct elemento *next;
  14.      };
  15.      
  16. //funzione uno crea lista con una seq di interi in input
  17.  
  18. struct elemento *creaListaSeq(){
  19.     int numero;
  20.     struct elemento *primo=NULL;
  21.     struct elemento *puntatore;
  22.    
  23.     printf("Inserisci il primo numero:\n");
  24.     scanf("%d",&numero);
  25.    
  26.     //se ha inserito zero termina subito
  27.     if(numero==0)
  28.         return primo;
  29.    
  30.     if(numero!=0){
  31.         primo=malloc(sizeof(struct elemento));
  32.         primo->num=numero;
  33.         }
  34.     puntatore=primo;
  35.     //ora faccio gli altri elementi
  36.     //lettura del prosssimo numero
  37.     printf("Inserisci il numero:\n");
  38.     scanf("%d",&numero);
  39.    
  40.     while(numero!=0){
  41.         puntatore->next=malloc(sizeof(struct elemento));
  42.         puntatore=puntatore->next;
  43.         puntatore->num=numero;
  44.         printf("Inserisci il numero:\n");
  45.         scanf("%d",&numero);
  46.         }
  47.     puntatore->next=NULL;
  48.    
  49.     return primo;
  50.     }
  51.  
  52. //ora implemento la funzione cancella
  53. void eliminadivisori(struct elemento *lista, int n){
  54.     struct elemento *prev;
  55.     prev=NULL;
  56.     //controllo primo elemento
  57.     //questo pezzo mi elimina il primo elemento se
  58.     //necessario
  59.     struct elemento *punt;
  60.     punt=lista;
  61.     if(n%lista->num!=0){
  62.         if(punt->next==NULL)
  63.             lista=NULL;
  64.         else
  65.             lista=punt->next;
  66.        
  67.         free(punt);
  68.         }
  69.     //------------------------------
  70.    
  71.     while(lista){
  72.         if(n%lista->num!=0){
  73.             prev->next=lista->next;
  74.             free(lista);
  75.             lista=prev->next;
  76.         }
  77.         else{
  78.             prev=lista;
  79.             lista=lista->next;
  80.             }
  81.     }
  82. }
  83.  
  84.  
  85. int main(){
  86.     struct elemento *lista;
  87.     lista=creaListaSeq();
  88.     eliminadivisori(lista,10);
  89.     while(lista!=NULL){
  90.         printf("%d-->", lista->num);
  91.         lista=lista->next;
  92.         }
  93.    
  94.     return 0;
  95.     }
Advertisement
Add Comment
Please, Sign In to add comment