86 lines
1.9 KiB
C
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;
|
|
}
|