Information

Author(s) Dorian Schrobiltgen Anthony Doeraene
Deadline No deadline
Submission limit No limitation

Tags

Sign in

Recherche étudiante

Cet exercice est basé sur l'implémentation d'un arbre binaire de recherche qui contient tous les étudiants de l'EPL. Cet arbre est ordonné suivant les noma des étudiants (l'étudiant ayant le plus petit noma se trouve donc le plus à gauche dans l'arbre). Pour chacun des étudiants, l'arbre contient en plus du noma, une donnée (le nom de l'étudiant), et la note obtenue au cours LEPL1503. Cet exercice est composé de deux parties.

Pour réaliser cet exercice, vous devez utiliser les structures suivantes:

struct element {
    struct element* left;
    struct element* right;
    int noma;
    char* name;
    double grade;
};

struct obtree{
    struct element* head;
};

struct linked_node{
    struct linked_node* next;
    int noma;
    char* name;
    double grade;
};

struct linked_list{
    struct linked_node* first;
    int nbr_of_element;
};

Dans un premier temps, il vous est demandé d'écrire une fonction baptisée insert qui, prenant comme argument un arbre, un noma, un nom name et une note grade, ajoute l'étudiant (avec les données name, noma et grade) dans l'arbre binaire en respectant l'ordre de ce dernier. Attention à copier le nom dans une nouvelle adresse mémoire (en appelant un malloc et en copiant la chaîne de caractères dans celle-ci) Dans le cas où l'étudiant ajouté possède un noma qui se trouve déjà dans l'arbre, il faut mettre à jour les données relatives à ce-dernier (c'est-à- dire modifier le nom et la note pour le noma correspondant). Dans le cas où une erreur apparait, retournez NULL.

Ensuite, il vous est demandé d'écrire une fonction baptisée convert qui, prenant comme argument la racine d'un arbre (c'est-à-dire l'élément central/le premier élément de l'arbre), convertit l'arbre binaire en une liste chainée n, dont les éléments sont les étudiants de l'arbre, triés par ordre croissant suivant leur noma. Il peut être utile d'implémenter une sous-fonction pour réaliser cette tâche. Le résultat de cette fonction convert est stockée sous la forme d'un paramètre de la fonction (il s'agit du deuxième paramètre), facilitant l'implémentation dans le cas où vous appelez récursivement convert.


Question 1: Insert
/*
 *@pre name != NULL, tree != NULL
 *@post retourne l'arbre binaire tree auquel a été ajouté l'étudiant dont les informations concernant celui-ci ont été passé en paramètre.
 */
tree_t* insert(tree_t *tree, int noma, char* name, double grade) {
Question 2: Convert
/*
*@pre n!=NULL
*@post retourne la liste chainée n contenant tous les éléments présent dans l'arbre passé en argument, dont les étudiants sont triés par
ordre croissant suivant leur noma
*/
list_t *convert(elem_t * head)
Question 3: Méthodes auxiliaires

Ecrivez ici vos méthodes auxiliares