Vous êtes sur la page 1sur 17

Récursivité

Listes chaînées
Structure
typedef struct maillon{
int donnee;
struct maillon * next;
}element;

//struct maillon element;


Création d’un maillon
element * creation_maillon(int nb)
{
element *nouveau;

nouveau = (element*) malloc(sizeof(element));


nouveau -> donnees = nb;
nouveau -> next = NULL;

return nouveau;
}
Ajout en tête de liste

element * ajout_en_tete(element* liste, element *m){

m -> next = liste;

return m;

}
Ajout en queue de liste
element * ajoute_queue(element *liste, element *m){
element *tete;
tete=liste;
if(liste==NULL){
return m;
}
while(liste->next!=NULL){
liste=liste->next;
}
liste->next=m;
return tete;
}
Ajouter en queue de liste - Récursive
element *ajout_queue_rec(element *liste , element *m){
if(liste == NULL){
return m;
}
liste -> next = ajout_queue_rec(liste -> next , m);
return liste;
}
Affiche liste du début

void affiche_liste(element *liste){

while(liste!=NULL){

printf("%d.",liste->donnees);

liste=liste->next;

}
Affiche liste du début - Récursive
void affiche_listeD_rec1(element *liste){
if(liste!=NULL) {
printf("%d.",liste->donnees);
affiche_listeD_rec1(liste->next);
}
}
Affiche liste de la fin - Récursive
void affiche_listeF_rec2(element *liste){
if(liste!=NULL){
affiche_listeF_rec2(liste -> next);
printf(" %d ",liste -> donnees);
}
}
Calculer nombre d’éléments d’une liste -
Rec
int LengthList(element *liste){
if (liste == NULL)
return 0;
else
return (LengthList(liste -> svt) + 1);
}
Recherche d’un élément d’une liste
element * recherche(element *liste,int valeur){
while(liste!=NULL){
if(liste->donnees==valeur){
return liste;
}
liste=liste->next;
}
return NULL;
}
Recherche d’un élément d’une liste
Recursive
element *recherche_rec(element *liste, int valeur){

if(liste==NULL) return NULL;

if(liste->donnees==valeur) return liste;

return recherche_rec(liste->next,valeur);

}
Recherche élément dans une liste –
iterative2
int RechercheIter(int x, Liste a){
while (a != null){
if (a.contenu == x)
return 1;
a = a.suivant;
}
return 0;
}
Recherche élément dans une liste –
Récursive2
int RechercheRec2(int x, Liste a){
if (a == null)
return 0;
if (a.contenu == x)
return 1;
return RechercheRec2(x, a.suivant);
}
Suppression d’une liste
void liberer(element *liste){
element *tmp ;
while(liste!=NULL){
tmp=liste->next;
free (liste);
liste=tmp;
}
}
Suppression d’une liste – Récursive V.1
void libererV1(element *liste){
element *tmp ;
if(liste!=NULL){
tmp=liste->next;
free (liste);
libererV1(tmp);
}
}
Suppression d’une liste – Récursive V.2
void libererV2(element *liste){
if(liste!=NULL){
libererV2(liste->next);
free(liste);
liste = NULL;
}
}

Vous aimerez peut-être aussi