diff --git a/tp7/exo3.c b/tp7/exo3.c new file mode 100644 index 0000000..0af8641 --- /dev/null +++ b/tp7/exo3.c @@ -0,0 +1,85 @@ +#include +#include +struct m_l_c_i { + int valeur; + struct m_l_c_i *suivant; +}; +typedef struct m_l_c_i milc; + +struct l_c_i { + milc *debut; +}; +typedef struct l_c_i ilc; + +ilc creer_ilc() { return (ilc){NULL}; } +milc *tete_ilc(ilc l) { return l.debut; } +milc *suivant_ilc(milc m) { return m.suivant; } +void inserer_ilc(ilc *l, milc *m, int x) { + milc *parent = l->debut; + while (x > 0) { + parent = parent->suivant; + } + m->suivant = parent->suivant; + parent->suivant = m; +} +void retirer_ilc(ilc *l, milc *m) { + if (l->debut == m) { + l->debut = m->suivant; + } + milc *parent = l->debut; + while (parent->suivant != m) { + parent = parent->suivant; + } + parent->suivant = m->suivant; + free(m); +} +int acceder_ilc(milc m) { + return m.valeur; +} +void modifier_ilc(milc *m, int x) { + m->valeur = x; +} +void inserer_tete_ilc(ilc *l, int x) { + milc* m = malloc(sizeof(milc)); + m->valeur = x; + m->suivant = l->debut; + l->debut = m; +} +int retirer_tete_ilc(ilc *l) { + milc* m = l->debut; + l->debut = m->suivant; + int x = m->valeur; + free(m); + return x; +} +void inserer_fond_ilc(ilc *l, int x) { + if (l->debut == NULL) { + inserer_tete_ilc(l, x); + } else { + milc* parent = l->debut; + while (parent->suivant != NULL) { + parent = parent->suivant; + } + milc* m = malloc(sizeof(milc)); + m->valeur = x; + m->suivant = NULL; + parent->suivant = m; + } +} +int retirer_fond_ilc(ilc *l) { + milc* m; + if (l->debut->suivant == NULL) { + m = l->debut; + l->debut = NULL; + } else { + milc* parent = l->debut; + while (parent->suivant->suivant != NULL) { + parent = parent->suivant; + } + m = parent->suivant; + parent->suivant = NULL; + } + int x = m->valeur; + free(m); + return x; +}