Liste chainées (getion des employés) langageC

Fermé
xlag Messages postés 2 Date d'inscription vendredi 20 mai 2011 Statut Membre Dernière intervention 21 mai 2011 - Modifié par xlag le 20/05/2011 à 22:27
xlag Messages postés 2 Date d'inscription vendredi 20 mai 2011 Statut Membre Dernière intervention 21 mai 2011 - 21 mai 2011 à 21:01
Bonjour,
Merci de me proposer une solution pour cet exercice, je serai vrement heureux car (I'm realy lost :s :s)

On désire représenter par des listes chainées un ensemble d'employés caractérisés par : un code (entier), un nom (tableau de caractères) et un salaire (réel). Ecrire les fonctions suivantes :
1) Ecrire une fonction qui accepte en arguments les informations caractérisant l'employé, crée et retourne cette employé (adresse d'une structure de type liste).
2) Ecrire une fonction ajout qui accepte en arguments la tête de liste et un employé. La fonction ajoute cet employé à la fin de la liste.
3) Ecrire une fonction qui permet d'ajouter un employé au début de la liste.
4) Ecrire une fonction qui permet d'insérer un employé dans la liste de manière à ce qu'elle soit triée par ordre croissant de code (on suppose que la liste est déjà triée par ordre croissant selon le code).
5) Ecrire une fonction qui permet d'afficher les codes des employés ayant un scalaire supérieur à 5000.
6) Ecrire un programme principal de test.



2 réponses

Hxyp Messages postés 401 Date d'inscription vendredi 28 janvier 2011 Statut Membre Dernière intervention 27 avril 2014 54
21 mai 2011 à 18:50
Bonjour,
Sur le site il y a une explication des listes chaînées : https://www.commentcamarche.net/contents/114-langage-c-les-listes-chainees
Pour l'exercice la structure pourrait ressembler à ceci :
struct emp{
    int code;
    char nom[256];
    double salaire;
    struct emp *next;
};
struct emp *debut;

Le principe est de sauvegarder seulement l'adresse de la première structure allouée qui possédera l'adresse de la suivante (dans *next pour l'exemple) ainsi on peut retrouver les données en partant de la première :
debut=malloc(sizeof(struct emp));//pointe sur un nouveau bloc
debut->code=54;
strcpy(debut->nom,"plop");
debut->salaire=350;
debut->next=NULL;
debut contient l'adresse de départ pour le moment la suivante est vide, et lors d'une nouvelle entrée à la suite :
struct emp *ptr;
debut->next=malloc(sizeof(struct emp)); //next du debut pointe vers le nouveau bloc
ptr=debut->next; //ptr sur le nouveau bloc
ptr->code=34;
strcpy(ptr->nom,"hello");
ptr->salaire=120;
ptr->next=NULL; //pointera sur la suivante ainsi de suite
etc
Pour atteindre les données on utilisera la première adresse en sautant sur la suivante :
struct emp *ptr=debut;
while(ptr->next!=NULL){
//faire un job sur le ptr actuel
ptr=ptr->next;
}
1
xlag Messages postés 2 Date d'inscription vendredi 20 mai 2011 Statut Membre Dernière intervention 21 mai 2011
21 mai 2011 à 21:01
merci mon frere, c'est sympa de ta part :) j'ai fini le travail et ca marche bien :)
0