Information

Author(s) Alexandra Onciul Anthony Doeraene
Deadline No deadline
Submission limit No limitation

Tags

Sign in

Question pour un Sinfpion

Aujourd’hui, c’est le jour des éliminations. Chaque joueur de notre jeu télévisé se voit attribué un score en fonction de ses performances aux épreuves précédentes. L’ensemble des joueurs est représentée par une liste chainée. Chaque noeud représente un joueur et la valeur associée au noeud représente le score. Pour se faire il faudra écrire 2 fonctions.

Premièrement, vous devez implémenter une fonction qui parcoure la structure chainée afin de trouver l’index de celui ayant le plus petit score, si deux joueurs possèdent le même score on considère le premier dans la liste comme celui qui sera éliminé.

Exemples d'utilisation:

  • findMinIndex([2,4,-7]) retourne 2;
  • findMinIndex([12,-42,-17, 6]) retourne 1;

Ensuite, une fois l’index du plus petit score trouvé, il faut supprimer ce noeud et retourner la valeur du noeud supprimé, il faut savoir faire peur aux participants restants avec le score du dernier éliminé! Et faire savoir à ceux ayant de moins bons scores qu’ils doivent se bouger au plus vite! Attention il faut prendre en compte les différents cas limites, comme les listes chainées vide ou encore un index trop élevé.

L’implémentation de la liste chainée est fournie mais à inclure dans votre réponse. N’oubliez pas de libérer la mémoire des noeuds, ce serait bête qu’un des joueurs ne soit pas libéré lorsqu’il perd !

Exemples d’utilisation:

  • removeTheMinIndex([2 , -1 ,-4], 2) retourne -4 et la liste chainée devient [2,-1];
  • removeTheMinIndex([-22 , -13 ,-74, 3 ,9], 2) retourne -74 et la liste chainée devient [-22 , -13 , 3 ,9];

Les noeuds composants la liste chainée sont implémentés de la manière suivante :

typedef struct Node {
    int value;
    struct Node* next;
} node_l;

Question 1: Find
int findMinIndex(node_l* head);
/*
*@pre head est un pointeur vers la tête de la liste;
*@post retourne l’index du score le moins élevé;
*      -1 si head == NULL
*/
Question 2: Remove
int removeTheMinIndex(node_l ** head, int MinIndex);
/*
*@pre **LLhead double pointeur vers la tête de la liste, MinIndex int >=0;
*@post retourne la valeur du noeud supprimé et -1 si LLhead est NULL ou si MinIndex > taille de la liste;
*/