apl/APL1.2/Aranger/listeChaînées.c

84 lines
2.4 KiB
C
Raw Permalink Normal View History

2022-01-14 06:54:18 +01:00
#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;
}