# include # include struct mail { double x; double y; struct mail* suivant; }; typedef struct mail maillon; void afficher_liste(maillon* liste) { maillon* p; for (p = liste; p != NULL; p = p->suivant) { printf("(%.1f, %.1f) -> ", p->x, p->y); } putchar('\n'); } 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->x = -12; /* Le premier maillon sera toujours négatif, les autres seront aléatoires */ premier->y = -3; p = premier; for (i = 0; i != 4; i++) { s = (maillon*) malloc(sizeof(maillon)); if (!s) { printf("Erreur d'allocation mémoire. (2) \n"); } s->x = (rand() % 50) - 25; s->y = (rand() % 50) - 25; p->suivant = s; p = s; } return premier; } maillon* supprime_coord_negatives(maillon* liste) { maillon* p; maillon* premier = liste; maillon* precedent = liste; for (p = liste; p != NULL; p = p->suivant) { if ((p->x) < 0.0 && (p->y) < 0.0) { p = precedent; p->suivant = p->suivant->suivant; precedent = p; p = p->suivant; } else { precedent = p; } } return premier; } int main(void) { maillon* liste = creation_liste(); afficher_liste(liste); afficher_liste(supprime_coord_negatives(liste)); return EXIT_SUCCESS; }