Structures, listes chainees en C

Fermé
nulle00 Messages postés 21 Date d'inscription dimanche 15 juin 2008 Statut Membre Dernière intervention 8 juillet 2008 - 8 juil. 2008 à 22:53
 George - 9 juil. 2008 à 12:06
Bonjour,
Je programme en c et je debute avec les stuctures. J'ai un peu de mal a comprendre exactement comment ca fonctionne, je suis en train de resoudre un exercice et disons que je bloque sur un certain point.. En fait j'ai une liste chainee qui est donc composee de plusieurs stuctures ayant les memes champs et un de ces champs est lui meme une liste chainee comprenant donc plusieurs structures.
Avec un exemple ca sera plus simple: disons qu'on cree une liste de personnes avec des details sur eux:


typedef struct adresse
{
    int numeroDeRue;
    char rue[20];
    char ville[20]
    struct adresse* next;
}


typedef struct personne
{
    char nom[20];
    int age;
    struct adress*;
    struct personne* next;
}


J'aimerai en fait par exemple rajouter une 2eme adresse a une personne specifique, disons que j'ai une commande:

ajouterAdresse <nom> <age> <numeroDeRue> <rue> <ville>

Comment je fais pour acceder au champ adresse d'une personne specifique et ajouter une adresse a cette liste chainee?
Je sais ecrire une fonction qui me trouve l'emplacement de la structure ayant le nom et l'age entres par l'utilisateur mais apres je bloque pour ajouter une structure a la 2eme liste chainee..
Merci de m'aider!
A voir également:

1 réponse

Bonjour,

il te faut trouver la personne (enfin son emplacement) ensuite il faut parcourir la liste de ses adresses en gardant en mémoire l'adresse en cours et l'adresse precedente. Une fois que ton adresse en cours est null, tu alloue (fct malloc) une struture de type adresse (tu la remplit) et tu la mets dans l'adresse precedente .

typedef struct personne
{
char nom[20];
int age;
struct adress*tete_adresse;
struct personne* next;
}

En gros :

1) tu recupere l'emplacement de la personne (de type *personne)
2) tu parcours ses adresses pour arriver en fin de liste avec une adresse *encours et adresse *precedente
encours=personne->tete_adresse;
precedente=NULL;
while(encours!=NULL)
{precedente=encours
encours->next
}
//A la sortie predente represente ton dernier maillon de ta liste chaine adresse
tu alloue une adresse et remplit sa structure puis le retour de malloc tu l'as met dans precedente

Bon courage
0