Files
DEV/DEV.1.1/CM3TEST/cm3B.3.c
Emmanuel Srivastava 0ccdf8d974 update
2025-01-21 12:41:42 +01:00

79 lines
2.0 KiB
C

#include <stdio.h>
#include <stdlib.h>
/* Structure représentant un maillon d'une liste chaînée */
typedef struct Maillon {
double valeur;
struct Maillon *suivant;
} Maillon;
/* Fonction pour afficher une liste chaînée */
void afficher_liste(Maillon *tete) {
Maillon *courant = tete;
while (courant != NULL) {
printf("%lf ", courant->valeur);
courant = courant->suivant;
}
printf("\n");
}
/* Fonction pour ajouter une valeur dans une liste triée */
Maillon *ajouter_valeur(Maillon *tete, double valeur) {
/* Création d'un nouveau maillon */
Maillon *nouveau = (Maillon *)malloc(sizeof(Maillon));
if (nouveau == NULL) {
perror("Erreur d'allocation mémoire");
exit(EXIT_FAILURE);
}
nouveau->valeur = valeur;
nouveau->suivant = NULL;
/* Si la liste est vide ou si la valeur doit être ajoutée en tête */
if (tete == NULL || valeur <= tete->valeur) {
nouveau->suivant = tete;
return nouveau;
}
/* Recherche de l'emplacement pour insérer la nouvelle valeur */
Maillon *courant = tete;
while (courant->suivant != NULL && courant->suivant->valeur < valeur) {
courant = courant->suivant;
}
/* Insertion du nouveau maillon */
nouveau->suivant = courant->suivant;
courant->suivant = nouveau;
return tete;
}
/* Programme principal */
int main(int argc, char *argv[]) {
/* Vérification des arguments */
if (argc < 2) {
fprintf(stderr, "Usage: %s <reel1> <reel2> ... <reelN>\n", argv[0]);
return EXIT_FAILURE;
}
Maillon *liste = NULL;
/* Conversion des arguments en double et insertion dans la liste */
for (int i = 1; i < argc; i++) {
double valeur = atof(argv[i]);
liste = ajouter_valeur(liste, valeur);
}
/* Affichage de la liste triée */
afficher_liste(liste);
/* Libération de la mémoire */
Maillon *temp;
while (liste != NULL) {
temp = liste;
liste = liste->suivant;
free(temp);
}
return EXIT_SUCCESS;
}