# include # include # include struct mail { unsigned short valeur; struct mail* suivant; }; typedef struct mail maillon; maillon* creation_liste(void) { int i; maillon* p; maillon* premier; maillon* s; srand(time(NULL)); premier = (maillon*) malloc(sizeof(maillon)); if (!premier) { printf("Erreur d'allocation mémoire. (1) \n"); } premier->valeur = (rand() % 889) + 111; p = premier; for (i = 0; i != 9; i++) { s = (maillon*) malloc(sizeof(maillon)); if (!s) { printf("Erreur d'allocation mémoire. (2) \n"); } s->valeur = (rand() % 889) + 111; p->suivant = s; p = s; } return premier; } void destruction_liste(maillon* liste) { maillon* p = liste; maillon* suivant; while (p != NULL) { suivant = p->suivant; free(p); p = suivant; } printf("Destruction terminée.\n"); } void afficher_liste(maillon* liste) { maillon* p; for (p = liste; p != NULL; p = p->suivant) { printf("| %d |", p->valeur); } putchar('\n'); } unsigned short recherche_max(maillon* liste) { unsigned short maximum = liste->valeur; maillon* p; for (p = liste; p != NULL; p = p->suivant) { if (p->valeur > maximum) { maximum = p->valeur; } } return maximum; } void retire_dernier(maillon* liste) { maillon* p; for (p = liste; p != NULL; p = p->suivant) { if (p->suivant->suivant == NULL) { /* Il faut faire pointer l'avant dernier maillon sur NULL */ p->suivant = NULL; free(p->suivant); } } printf("Succès.\n"); } maillon* permutation_liste(maillon* liste) { maillon* p; maillon* temp = liste; for (p = liste; p->suivant != NULL; p = p->suivant) { p = p->suivant; } /* TODO */ liste->valeur = p->valeur; liste->suivant = p; return liste; } int main(void) { maillon* liste = creation_liste(); afficher_liste(liste); printf("Maximum de la liste : %hu\n", recherche_max(liste)); /*retire_dernier(liste);*/ /*afficher_liste(liste);*/ afficher_liste(permutation_liste(liste)); destruction_liste(liste); return EXIT_SUCCESS; }