79 lines
2.0 KiB
C
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;
|
|
}
|