[C] Creazione di una lista (confronto fra metodi)

di il
5 risposte

[C] Creazione di una lista (confronto fra metodi)

Salve a tutti, volevo chiedere a qualcuno di più esperto un parere su quale metodo fra queste due funzioni sia meglio (e il perché) per la creazione di una lista con nodi che si creano solo se il valore in entrata rispetta delle caratteristiche (in questo caso che sia dispari).

Prima funzione:

struct element_t *create_odd_list(int values[], int size) {
    struct element_t *current = NULL;
    struct element_t *prev = NULL;
    struct element_t *new = NULL;
    struct element_t *head = NULL;
    
    for(int i = 0; i < size; i++) {
        if (values[i] % 2 != 0) {
            new = (struct element_t *) malloc(sizeof(struct element_t));

            if (new) {
                if(head == NULL) {
                    head = new;
                    new->next = NULL;
                } else {
                    current = head;
                    prev = head;
                    
                    while(current) {
                        prev = current;
                        current = current->next;
                    }
                    
                    prev->next = new;
                }         
                
                new->value = values[i];
            }
        }
    }
return head;
}
Seconda funzione:
(La funzione crea fa la malloc e collega i valori, tenete presente che la struct è formata da un intero e dal puntato *next)

struct elem *inserimento_creazione(int val[],int size){

	struct elem *temp=NULL;
	struct elem *testa=NULL;
	
	for(i=0;i<size;i++){	
	if(dispari(val[i])){				
		if(temp){								
		temp=temp->next=crea(val[i],NULL);	
		}else{				
		temp=testa=crea(val[i],NULL);						
		}						
	}					
}					
return testa;
}

5 Risposte

  • Re: [C] Creazione di una lista (confronto fra metodi)

    La seconda è molto più leggibile (anche se la funzione dispari() è davvero esagerata ); in realtà la prima è meglio perchè viene testato il valore di ritorno della malloc() (comunque nel secondo caso basterebbe solo una piccola modifica).
    In generale entrambe le funzioni hanno il problema che non segnalano eventuali problemi di memoria; basterebbe far loro ritornare un int come codice di ritorno e restituire la lista per tramite di un puntatore passato come parametro.
  • Re: [C] Creazione di una lista (confronto fra metodi)

    Sono un disastro entrambe, anche se non si capisce essenzialmente nulla.
    Posta entrambe le versioni complete.
    Se la domanda è di tipo "stilistico" sarebbe la seconda, ma è totalmente sbagliata
    if(dispari(val[i])){            
          if(temp){
    Da dove salta fuori questo temp?
  • Re: [C] Creazione di una lista (confronto fra metodi)

    +m2+ scusa ma perché sei così acido? Se trovi degli errori segnalali all'OP e basta. Nella fattispecie temp é un puntatore locale inizializzato a NULL.
  • Re: [C] Creazione di una lista (confronto fra metodi)

    Candaluar ti ringrazio molto per il tuo suggerimento (ora che me l'hai fatto notare non so perché io abbia fatto una funzione per il dispari hahaha )
  • Re: [C] Creazione di una lista (confronto fra metodi)

    candaluar ha scritto:


    +m2+ scusa ma perché sei così acido? Se trovi degli errori segnalali all'OP e basta. Nella fattispecie temp é un puntatore locale inizializzato a NULL.
    In effetti non tenere conto che chi inizia oggi a vedere queste cose NON ha certo bisogno di sentirsi dire certe cose, +m+ non lo comprende ...

    Ci sono tanti modi di essere "esperto".
Devi accedere o registrarti per scrivere nel forum
5 risposte