Visualizzazione dei risultati da 1 a 10 su 15

Visualizzazione discussione

  1. #10
    Utente di HTML.it L'avatar di torn24
    Registrato dal
    Aug 2008
    Messaggi
    551

    Ciao

    Ciao , la funzione delete() funzionava bene , eri tu che usavi la variabile intera i al posto di Lista
    mentre per la funzione cerca , effettivamente era sbagliata , perchè se non trovava il valore , eseguiva
    if(list_head->valore==n) su NULL
    ecco le correzioni , se vuoi modifica la funzione inserisci , in modo che non solo puoi creare la lista , ma ne puoi aggiungere elementi .

    codice:
    #include <stdio.h>
    #include <stdlib.h>
    #include <stdbool.h> //Ho messo la libreria percè il true nel while mi da problemi.. Strano, perchè anche senza libreria funzionava..
    struct elemento{ 
    int valore; 
    struct elemento *next;
    };
    void menu();
    struct elemento *insElemento(struct elemento *); 
    struct elemento *ordLista(struct elemento *);
    void printElemento(struct elemento *);
    struct elemento *searchlist(struct elemento *, int n);
    struct elemento *Delete (struct elemento *, int DaEliminare);
    int main(){
     struct elemento *Lista=NULL ; 
     int comando, x, i;
     do{
     menu(); 
     printf("\nComando:\t"); 
     scanf("%d", &comando); 
     
     switch(comando){  
     case 1:{   
     Lista=insElemento(Lista);   
     break;  
     }   
     case 2:{   
     Lista=ordLista(Lista);   
     break;  
     } 
     case 3:{
     printElemento(Lista);
     break;
     }
     case 4:{
      printf("\n\nInserisci il valore da cercare:\n\n");
      scanf("%d",&x);
      if(searchlist(Lista,x)!=NULL)
      printf("\n\nIl valore e' nella lista.\n\n");
      else 
      printf("\n\nIl valore non e' nella lista.\n\n");
     break;
    } 
     case 5:{
      printf("\n\nInserisci il valore da eliminare:\n\n"); 
      scanf("%d",&x);
      if(Lista!=NULL)//mancava lista al posto della variabile i 
        Lista=Delete(Lista,x);//i è un intero non devi assegnarli un puntatore e non serve
      else printf("\n\nErrore. Lista vuota.\n\n");
      break;
     } 
    }
    }while(true);
    return 0; 
    }
    void menu(){ 
     printf("\n--------------------------"); 
     printf("\n1 - Inserisci Elemento\n"); 
     printf("2 - Ordinamento Lista\n"); 
     printf("3 - Visualizza Lista\n");
     printf("4 - Cerca elememto Lista\n");
     printf("5 - Elimina elemento Lista\n"); 
     printf("--------------------------\n");
    }
    //INSERIMENTO LISTA
    struct elemento *insElemento(struct elemento *list_head){    
        
        /*QUESTA FUNZIONE VA BENE NEL CASO LA LISTA SIA NULL
          MA SE LA LISTA è GIA' STATA CREATA , BISOGNEREBBE MODIFICARE
          LA FUNZIONE IN MODO CHE AGGIUNGA ELEMENTI , CIOE SCORRERE LA
          LISTA FINO A NULL , E DA LI AGGIUNGERE I NUOVI NODI*/
    struct elemento *list_pointer, *list_record;    
    int i=2, n=0, val, newval; 
       
    list_record = (struct elemento *)malloc(sizeof(struct elemento));    
    printf("\nInserisci il 1 elemento: ");    
    scanf("%d", &val); 
    list_record->valore = val; 
    list_head=list_record; 
    list_pointer = list_head; 
    do{          
     list_record->next = (struct elemento *)malloc(sizeof(struct elemento));          
     list_record = list_record->next;          
     printf("\nInserisci il %d elemento: ", i++);          
     scanf("%d", &newval);          
     list_record->valore = newval;
     printf("Inserire nuovo valore?");
     scanf("%d",&n);                 
    }while(n==1);        
    list_record->next = NULL;       
    list_pointer = list_head;
    printElemento(list_head);
    return (list_head);
    }  
    //ORDINAMENTO LISTA
    struct elemento *ordLista(struct elemento *list_head) {
    struct elemento *list_pointer;
    int flag, temp;  
    flag = 1;  
    while (flag == 1) {    
    list_pointer = list_head;    
    flag = 0;    
    while (list_pointer->next != NULL) {      
    if (list_pointer->valore > (list_pointer->next)->valore) {        
    temp = list_pointer->valore;        
    list_pointer->valore = (list_pointer->next)->valore;        
    (list_pointer->next)->valore = temp;        
    flag = 1;      
    }      
    list_pointer = list_pointer->next;    
    }     
    }      
    printElemento(list_head);
    return list_head;}
    //CERCA ELEMENTO
    struct elemento *searchlist(struct elemento *list_head,int n){       
    while(list_head!=NULL ) 
    {   
     if(list_head->valore==n)           
        return list_head;  
      list_head=list_head->next;     
    }                   
        
    
    
    return NULL;//modifica alla funzione 
    }
    //ELIMINA ELEMENTO
    struct elemento *Delete(struct elemento *list_head, int DaEliminare){    
    struct elemento *list_pointer, *list_record;
    for(list_pointer=list_head, list_record=list_head; list_record!=NULL && list_record->valore!=DaEliminare; list_pointer=list_record, list_record=list_record->next); 
    if(list_record->valore==DaEliminare) {      
    if(list_record!=list_head)
    {          
    list_pointer->next=list_record->next;           
    free(list_record);
    return list_head;      
    }      
    else 
    {          
    list_pointer=list_record->next;            
    free(list_record);
    return list_pointer;            
    } 
    }   
    return list_head;       
    }
    //STAMPA LISTA
    void printElemento(struct elemento *Lista){ 
                                                
    struct elemento *list_pointer = Lista;    
    printf("\nlista -> ");         
    while(list_pointer != NULL){            
    printf("%d", list_pointer->valore);                
    printf(" -> ");               
    list_pointer = list_pointer->next;          
    }     
    printf(" NULL"); 
    }
    Ultima modifica di torn24; 30-07-2014 a 10:40
    Tecnologia

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.