Add liste chainée in C

This commit is contained in:
flyingscorpio@arch-desktop 2021-10-24 21:22:59 +02:00
parent 65e4891d51
commit afaa62f59d
2 changed files with 93 additions and 1 deletions

View file

@ -3,6 +3,9 @@ all: hanoi pile file
hanoi: hanoi.c
cc hanoi.c -o hanoi
liste-chainee: liste-chainee.c
cc liste-chainee.c -o liste-chainee
pile: pile-dynamique.c
cc pile-dynamique.c -o pile-dynamique
@ -10,4 +13,4 @@ file: file-dynamique.c
cc file-dynamique.c -o file-dynamique
clean:
rm file-dynamique pile-dynamique hanoi
rm liste-chainee file-dynamique pile-dynamique hanoi

View file

@ -0,0 +1,89 @@
#include <stdio.h>
#include <stdlib.h>
typedef struct Element Element;
struct Element {
int val;
Element *suiv;
};
typedef struct Liste Liste;
struct Liste {
Element *premier;
};
Liste *creer_liste();
int est_vide(Liste*);
void empiler(Liste*, int);
void depiler(Liste*);
void afficher(Liste*);
int main() {
Liste *liste = creer_liste();
afficher(liste);
empiler(liste, 3);
afficher(liste);
empiler(liste, 12);
afficher(liste);
empiler(liste, 9);
afficher(liste);
depiler(liste);
afficher(liste);
free(liste);
return 0;
}
Liste *creer_liste() {
Liste *liste = malloc(sizeof(*liste));
if (liste == NULL) {
exit(EXIT_FAILURE);
}
liste->premier = NULL;
return liste;
}
int est_vide(Liste *liste) {
return (liste->premier == NULL);
}
void empiler(Liste *liste, int nombre) {
Element *nouveau = malloc(sizeof(*nouveau));
if (nouveau == NULL) {
exit(EXIT_FAILURE);
}
nouveau->val = nombre;
nouveau->suiv = liste->premier;
liste->premier = nouveau;
}
void depiler(Liste *liste) {
if (liste == NULL) {
exit(EXIT_FAILURE);
}
if (!est_vide(liste)) {
Element *a_supprimer = liste->premier;
liste->premier = liste->premier->suiv;
free(a_supprimer);
}
}
void afficher(Liste *liste) {
if (liste == NULL) {
exit(EXIT_FAILURE);
}
Element *actuel = liste->premier;
while (actuel != NULL) {
printf("%d -> ", actuel->val);
actuel = actuel->suiv;
}
printf("NULL\n");
}