#include #include #include struct Cellule { struct Cellule* suiv; int val; }; typedef struct Cellule Cellule; void ajout_tete(Cellule** l, int val) { Cellule* p; p = malloc(sizeof(Cellule)); p->val = val; p->suiv = *l; *l = p; } void imprimer(Cellule* l) { while (l != NULL) { printf("%d\n", l->val); l = l->suiv; } } bool est_trie(Cellule* l) { if (l == NULL) { return true; } int temp; while (l->suiv != NULL) { temp = l->val; l = l->suiv; if (l->val < temp) { return false; } } return true; } void supprimer_tete(Cellule** l) { Cellule* p; p = (*l)->suiv; free(*l); *l = p; } void desallouer(Cellule** l) { while ((*l)->suiv != NULL) { supprimer_tete(l); } free(*l); } // 2.2.1 void inserer(Cellule** p, int val) { Cellule* l = *p; if (l == NULL) { ajout_tete(p, val); return; } while (l->suiv != NULL && l->val < val) { p = &l->suiv; l = l->suiv; } if (l->val == val) { return; } else if (l->val < val) { p = &l->suiv; } ajout_tete(p, val); } int main() { // Création de la liste Cellule* l = NULL; ajout_tete(&l, 59); ajout_tete(&l, 53); ajout_tete(&l, 47); ajout_tete(&l, 43); ajout_tete(&l, 41); ajout_tete(&l, 37); ajout_tete(&l, 31); ajout_tete(&l, 29); ajout_tete(&l, 23); ajout_tete(&l, 19); ajout_tete(&l, 17); ajout_tete(&l, 13); ajout_tete(&l, 11); ajout_tete(&l, 7); ajout_tete(&l, 5); ajout_tete(&l, 3); ajout_tete(&l, 2); if (!est_trie(l)) { printf("C'est pas trié !\n"); } // Test début, millieu et fin inserer(&l, 0); inserer(&l, 30); inserer(&l, 70); // Test redondance début, millieu et fin inserer(&l, 2); inserer(&l, 7); inserer(&l, 59); imprimer(l); desallouer(&l); }