mp2i-info/tp7/exo3.c
2026-01-13 15:25:16 +01:00

86 lines
1.9 KiB
C

#include <stdlib.h>
#include <string.h>
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;
}