84 lines
2.4 KiB
C
84 lines
2.4 KiB
C
|
#include<stdio.h>
|
||
|
#include<stdlib.h>
|
||
|
#include<time.h>
|
||
|
|
||
|
|
||
|
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;compteur<numElem;compteur++){ /*On créé autant de maillon que demander*/
|
||
|
p->suivant=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;
|
||
|
}
|