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;
 | |
| }
 |