1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108
| #include <stdio.h>
#include <stdlib.h>
typedef struct Element Element; // Creation d'une structure Element qui possede un champs nombre et un pointeur vers l'element suivant //
struct Element
{
char chainecaract[5];
Element *suivant;
};
typedef struct Liste Liste;
struct Liste
{
Element *premier; // une structure de type liste (C'est la case qui pointe vers le 1ère element) avec un pointeur qui pointe vers le premier element
};
Liste *initialisation() // Fontion pour initialiser un premiere element et la case de controle liste//
{
Liste *liste = malloc(sizeof(*liste)); // on alloue de la memoire pour un element et pour une case liste (celui qui pointe vers le 1er element)
Element *element = malloc(sizeof(*element));
if (liste == NULL || element == NULL) // on verifie que les alloc dyn on fonctionné//
{
exit(EXIT_FAILURE);
}
sprintf(element->chainecaract,"00000"); // On attribue au champs nombre du 1er element la valeur 0, on fait pointer le pointeur suivant de l'element vers NULL//
element->suivant=NULL; // On fait pointer le pointeur de la case liste vers le nouvel element //
liste->premier=element;
return liste;
}
void inssertiondebutdliste(Liste *liste,char nvchainecaract[5]) // Fonction qui va inséré un nouvel élement en début de liste//
{
Element *nouvelelement = malloc(sizeof(*nouvelelement)); // on allou la memeoire pour le nouvel element//
if (liste == NULL || nouvelelement == NULL)
{
exit(EXIT_FAILURE);
}
nouvelelement->chainecaract[5]=nvchainecaract[5]; // on attribue au champs nombre la valeur nvnombre//
nouvelelement->suivant=liste->premier; // on fait pointer le pointeur suivant du nouvel ellement vers le meme endroit que le ponteur de la case liste(qui pointe vers le 1er element actuel//
liste->premier= nouvelelement; // et on fait pointer la case liste vers le nouveau premier element//
}
void suprimer1erelement(Liste *liste) // fonction qui supprime le 1er element de la liste//
{
if (liste == NULL)
{
exit(EXIT_FAILURE);
}
if (liste->premier != NULL) // si le 1er element n'est pas nul//
{
Element *asuprimer = liste->premier; // on cré un pointeur de type element qui va pointer la ou pointe la case liste qui est le 1er element actuel//
liste->premier=liste->premier->suivant; // on fait que le pointeur de la case liste ne pointe plus vers le 1er element actuel met l'elmenent vers lequel le 1er element pointe cad le 2eme element qui sera le nouveau premier element//
free(asuprimer); // on efface de la memoire ce que notre pointeur pointe cad le 1er element actuel//
}
}
void afficherlistechainer(Liste *liste) // fonction qui affiche la liste chainée //
{
if (liste == NULL)
{
exit(EXIT_FAILURE);
}
Element *actuel= liste->premier; // on crée un element appelé element actuel qui vaut le premier de la liste//
while(actuel != NULL) // on commence par afficher le nombre de l'element actuel qui est le 1er element, puis on passe a l'element suivant et on le parcours, on le fait tant qu'on est pas arriver a la fin de la liste chainé qui vaut NULL//
{
printf("%s|",actuel->chainecaract);
actuel=actuel->suivant;
}
}
int main()
{
Liste *maliste=initialisation();
inssertiondebutdliste(maliste,"0000");
inssertiondebutdliste(maliste,"0000");
inssertiondebutdliste(maliste,"0000");
inssertiondebutdliste(maliste,"0000");
Liste *maliste2=initialisation();
inssertiondebutdliste(maliste2,"0000");
inssertiondebutdliste(maliste2,"0000");
inssertiondebutdliste(maliste2,"0000");
inssertiondebutdliste(maliste2,"0000");
printf("\n\n");
afficherlistechainer(maliste);
printf("\n");
afficherlistechainer(maliste2);
return 0;
} |
Partager