List of structs

Asked

Viewed 631 times

2

I would like to know the advantage 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 only one operating 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;
}

1 answer

2


The way it’s implemented, it’s not the right way, following the database hierarchy:

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

The implementation of the list should be the same:

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 entered, will add + 1 employee.

From the moment you put one list inside another, its structure stops being a list and becomes one Graph

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

Which is similar to its structure.

Using a structure of Graph, (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.

Browser other questions tagged

You are not signed in. Login or sign up in order to post.