List of structs

2

I would like to know the benefit of using a list in this way.

typedef struct Pessoas {

    char nome[20];
    int idade;
    struct Pessoas *prox;
}pessoas;

typedef struct Funcionario {
    pessoas *pessoa;
    struct Funcionario *prox;
}funcionario;

For just one employee struct.
I made this statement to insert, but I do not know is correct:

funcionario* adicionar(pessoas *p, char *nome, int idade) {

    funcionario *novos = malloc(sizeof(funcionario));
    pessoas *outra = malloc(sizeof(pessoas));
    strcpy(outra->nome, nome);
    outra->idade = idade;
    novos->pessoa = outra;
    novos->prox = p;

    return novos;
}
    
asked by anonymous 07.12.2016 / 03:59

1 answer

2

As it is implemented, it is not the right way, following the database hierarchy:

|-------------|              |--------|
| Funcionário |------1-N-----| Pessoa |
|-------------|              |--------|

The implementation of the list should be the same thing:

typedef struct Pessoas {
    char nome[20];
    int idade;
    struct Pessoas *prox;
}pessoas;

typedef struct Funcionario {
    pessoas *pessoa;
}funcionario;

or:

typedef struct Funcionario {
    char nome[20];
    int idade;
    struct Funcionario *prox;
}funcionario;

Where each person inserts, will add + 1 employee.

From the moment you place a list inside another, your structure stops being a list and becomes a #

typedef struct _grafo{
    struct grafo next;
    struct grafo child;
    struct grafo parent;
}grafo;

Which is similar to its structure.

Using a Graph structure, (just like the one you are using), it is feasible to use if you have different employees.

typedef struct Pessoas {

    char nome[20];
    int idade;
    struct Pessoas *prox;
}pessoas;

typedef struct Funcionario {
    pessoas *pessoa;
    char *setor;
    float salario;
    /* ... */
    struct Funcionario *prox;
}funcionario;

So in this structure it is possible to register different types of employees.

    
07.12.2016 / 04:43