Funzione Insert per Strutture Dati

di il
21 risposte

21 Risposte - Pagina 2

  • Re: Funzione Insert per Strutture Dati

    Non è secondario usare puntatori o no nella struttura. La struttura dei dati deve essere quella del primo post.
  • Re: Funzione Insert per Strutture Dati

    Per risolvere l'esercizio ho questo programma fatto dal mio professore, da cui prendere spunto. Non capisco, però, come scorrere all'interno della struttura per confrontare le età, che è quello che mi serve... non so come utilizzare il puntatore che voi mi dite di inserire nella struttura.. in questo caso non ho una lista
    #include <stdio.h>
    #include <stdlib.h>
    
    #define PERSON_FIELD_SIZE 30
    #define PERSON_FIELD_STRING_SPEC "29"
    
    struct person_t {
    	char name[PERSON_FIELD_SIZE];
    	char surname[PERSON_FIELD_SIZE];
    	unsigned age;
    };
    
    typedef struct person_t person_t;
    
    /* Protos
     *
     */
    
    person_t *
    people_alloc(size_t number_of_people);
    void
    people_dealloc(person_t *people);
    void
    people_input(person_t *people, size_t number_of_people);
    void
    people_print(person_t *people, size_t number_of_people);
    
    /* Functions
     *
     */
    
    person_t *
    people_alloc(size_t number_of_people){
    	return calloc(sizeof(person_t), number_of_people);
    }
    
    void
    people_dealloc(person_t *people){
    	free(people);
    }
    
    void
    people_input(person_t *people, size_t number_of_people){
    	size_t i;
    
    	for(i=0; i<number_of_people; i++){
    		printf("\nInsert # %zu name: ", i);
    		scanf("%" PERSON_FIELD_STRING_SPEC "s", people[i].name);
    		printf("surname: ");
    		scanf("%" PERSON_FIELD_STRING_SPEC "s", people[i].surname);
    		printf("age: ");
    		scanf("%u", &people[i].age);
    	}
    }
    
    void
    people_print(person_t *people, size_t number_of_people){
    	size_t i;
    
    	printf("\n\nName\t\t\tSurname\t\t\tAge\n"); 
    	for(i=0;i<80; i++){
    		printf("-");
    	}
    	printf("\n");
    	for(i=0; i<number_of_people; i++){
    		printf("%s\t\t\t%s\t\t\t%u\n", people[i].name, people[i].surname, people[i].age); 
    	}
    }
    
    int
    main(int argc, char **argv){
    	person_t *people=NULL;
    	char s[PERSON_FIELD_SIZE];
    	size_t number_of_people;
    
    	printf("Insert number of people: ");
    	scanf("%zu", &number_of_people);
    
    	people=people_alloc(number_of_people);
    	if(people){
    		people_input(people, number_of_people);
    		people_print(people, number_of_people);
    		people_dealloc(people);
    	}
    	return 0;
    }
  • Re: Funzione Insert per Strutture Dati

    vorrei capire come fare la funzione prima
    L'implementazione della funzione dipende necessariamente dalla struttura dati utilizzata.
    Ad ogno modo, per risolvere la questione devi ritornare alla struttura dati precedente, dove avevi delle stringhe di dimensione PERSON_FIELD_SIZE, e utilizzare strcpy().
  • Re: Funzione Insert per Strutture Dati

    Il problema di strcpy l'ho capito, tu parli di questo codice?
    #include <stdio.h>
    #include <stdlib.h>
    
    
    struct list_t {
       char *name;
       char *surname;
       int age;
       struct list_t *next;
    };
    typedef struct list_t list_t;
    
    list_t *
    list_cons(char *name, char *surname, int age, list_t *list){
       list_t *new;
    
       new=malloc(sizeof(list_t));
       if(new){
          strcpy(name, new->name);
          strcpy(surname, new->surname);   // modificato con strcpy
          new->age=age;
          new->next=list;
       }
       return new;
    }
    
    void
    list_print(list_t *list){
       
       while(list){
          printf("NAME: %s\n", list->name);
          printf("SURNAME: %s\n", list->surname);
          printf("AGE: %i\n", list->age);
          list=list->next;
       }
       printf("\n");
    }
    
    int
    main(int argc, char **argv){
       list_t *l;
       char *name;
       char *surname;
       int age;
       int number_of_people,i;
    
       printf("Insert number of people: ");
       scanf("%i", &number_of_people);
    
    
       l=NULL;
       for(i=0; i<number_of_people; i++) {
          getchar();
          printf("Insert name: ");
          scanf("%s", name);
          getchar();
          printf("surname: ");
          scanf("%s", surname);
          getchar();
          printf("age: ");
          getchar();
          scanf("%i", &age);
          l=list_cons(name, surname, age, l);
       }
          list_print(l);
       return 0;
    }
  • Re: Funzione Insert per Strutture Dati

    Puoi usare la struttura person e costruire una nuova struttura contenente un elemento person e un puntatore al prossimo elemento per la lista. Chiaro?
  • Re: Funzione Insert per Strutture Dati

    Se ho capito bene dici di creare una lista e ogni elemento della lista è composto da una struttura person e da un puntatore all'elemento successivo. Corretto?
  • Re: Funzione Insert per Strutture Dati

    Si, prova...
Devi accedere o registrarti per scrivere nel forum
21 risposte