Files
DEV/prepa_CM3/ex1_B.c

75 lines
1.7 KiB
C

#include <stdio.h>
#include <stdlib.h>
/* Définition de la structure pour un maillon de la liste chaînée*/
struct Node {
int value;
struct Node* next;
};
/* Alias pour faciliter l'utilisation de la structure*/
typedef struct Node Node;
/* Fonction pour ajouter un entier dans la liste de manière ordonnée*/
Node* insertOrdered(Node* head, int value) {
Node* newNode = (Node*)malloc(sizeof(Node));
Node* current;
newNode->value = value;
newNode->next = NULL;
if (head == NULL || value < head->value) {
newNode->next = head;
return newNode;
}
current = head;
while (current->next != NULL && current->next->value < value) {
current = current->next;
}
newNode->next = current->next;
current->next = newNode;
return head;
}
/* Fonction pour afficher les valeurs dans la liste*/
void displayList(Node* head) {
Node* current = head;
while (current != NULL) {
printf("%d ", current->value);
current = current->next;
}
printf("\n");
}
int main() {
Node* head = NULL; /* Tête de la liste*/
while (1) {
int userInput;
printf("Entrez un entier (ou appuyez sur Entrée pour quitter) : ");
if (scanf("%d", &userInput) != 1) {
/* L'utilisateur a appuyé sur Entrée, quitter la boucle*/
break;
}
/* Insérer l'entier dans la liste de manière ordonnée*/
head = insertOrdered(head, userInput);
/* Afficher la liste actuelle*/
displayList(head);
}
/* Libérer la mémoire allouée pour la liste à la fin du programme*/
while (head != NULL) {
Node* temp = head;
head = head->next;
free(temp);
}
return 0;
}