#include #include #include typedef struct mail{ unsigned short entier; struct mail *suivant; }maillon; void afficherLC(maillon *premierMaillon); maillon* creatList(int numElem); void deleteList(maillon *premierMaillon); maillon* addMail(maillon *firstMail, unsigned short valeur); int main(void){ maillon *premierMaillon=creatList(10); printf("on a créé la liste\n"); afficherLC(premierMaillon); deleteList(premierMaillon); printf("On a supprimé la liste chainé\n"); afficherLC(premierMaillon); printf("On voit qu'il ne reste plus que le pointeur non dynamiquement alloué (le premier)\n"); return EXIT_SUCCESS; } void afficherLC(maillon *premierMaillon){ maillon* p; for(p = premierMaillon;p != NULL;p=p->suivant) printf("%hu,%p \n", p->entier,p); } maillon* addMail(maillon *firstMail, unsigned short valeur){//ajoute un maillon et renvoi son adresse maillon *p= (maillon*) malloc(sizeof(maillon));/*On créé le nouveau maillon et il est le pointé du pointeur p*/ if(p){ p->entier=valeur;/*Notre nouveau maillon prend la valeur voulue*/ p->suivant=NULL;/*Notre maillon dirige sur un pointeur NULL*/ firstMail->suivant=p;/*L'ancien maillon pointe desormais sur celui qu'on vient de créer*/ } return p; } maillon* creatList(int numElem){ maillon *p=(maillon*) malloc(sizeof(maillon));/*On créé le premier maillon de la chaine et il est pointé par p*/ maillon* firstMail=p;/*On fait une copie du premier maillon*/ p->entier=5; int compteur=0; for(compteur=0;compteursuivant=addMail(p,5);/*on créé un nouveau maillon grace a une fonction , cette derniere renvoi l'adresse du maillon créé et on affecte cette adresse au maillon actuel*/ p=p->suivant;/*notre pointeur va desormais pointé sur le maillon suivant le maillon actuellement pointer*/ } return firstMail; } void deleteList(maillon *adrMaillon){ maillon* p; maillon* saveFirst=adrMaillon; while(adrMaillon!=NULL){ p=adrMaillon->suivant;/* p pointe sur l'adresse du maillon suivant */ free(adrMaillon);/*On libere le maillon de l'adresse adrMaillon*/ adrMaillon=p;/*adrMaillon pointe sur l'adresse du mmaillon suivant*/ /*Le principe cest de retenir l'adresse du maillon suivznt, ensuite on supprime le maillon actuel et ainsi de suite jusqua atteindre la fin de la liste*/ } saveFirst->suivant=NULL; }