Add liste chainée in C
This commit is contained in:
parent
65e4891d51
commit
afaa62f59d
2 changed files with 93 additions and 1 deletions
|
@ -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
|
||||
|
|
89
algorithmique/structures-de-donnees/liste-chainee.c
Normal file
89
algorithmique/structures-de-donnees/liste-chainee.c
Normal 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");
|
||||
}
|
Loading…
Reference in a new issue