75 lines
1.7 KiB
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;
|
|
} |