From afaa62f59d7b01a3e8428e1b369c4ba600903c48 Mon Sep 17 00:00:00 2001 From: "flyingscorpio@arch-desktop" Date: Sun, 24 Oct 2021 21:22:59 +0200 Subject: [PATCH] =?UTF-8?q?Add=20liste=20chain=C3=A9e=20in=20C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- algorithmique/structures-de-donnees/Makefile | 5 +- .../structures-de-donnees/liste-chainee.c | 89 +++++++++++++++++++ 2 files changed, 93 insertions(+), 1 deletion(-) create mode 100644 algorithmique/structures-de-donnees/liste-chainee.c diff --git a/algorithmique/structures-de-donnees/Makefile b/algorithmique/structures-de-donnees/Makefile index 6253f55..878dfbf 100644 --- a/algorithmique/structures-de-donnees/Makefile +++ b/algorithmique/structures-de-donnees/Makefile @@ -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 diff --git a/algorithmique/structures-de-donnees/liste-chainee.c b/algorithmique/structures-de-donnees/liste-chainee.c new file mode 100644 index 0000000..49bb894 --- /dev/null +++ b/algorithmique/structures-de-donnees/liste-chainee.c @@ -0,0 +1,89 @@ +#include +#include + +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"); +}