#include #include /* 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 ... \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; }