Vous êtes sur la page 1sur 2

Fonctions sur les listes chaînées

typedef liste { float val ;

struct liste * next ; } liste ;


Ajout au début de la liste Supprimer au début de la liste
liste * ajoutDebut(liste * P, float x) liste * supprimeDebut(liste * P)
{ liste * nv =NULL ; { liste * tmp =NULL ;
nv=(liste*) malloc(sizeof(liste)) ; If (P !=NULL)
nv->val=x ; { tmp=P ;
nv->next=P ; P=P->next ;
P=nv ; free(tmp) ;
return P ; }
} return P ;
}
Ajout à la fin de la liste Supprimer à la fin de la liste
liste * ajoutFin(liste * P, float x) liste * supprimeFin(liste * P)
{ liste * nv =NULL ; liste * q=NULL ; { liste * q=NULL ;
if (P==NULL) P=ajoutDebut(P,x) ; if (P==NULL ) return NULL ;
else { q=P ; if (P->next==NULL) P=supprimeDebut(P) ;
While (q->next !=NULL) q=q->next ; else { q=P ;
nv=(liste*) malloc(sizeof(liste)) ; While (q->next->next !=NULL)
nv->val=x ; q=q->next ;
nv->next=q->next ; free(q->next) ;
q->next=nv ; q->next=NULL;
} }
return P ; return P ;
} }
Ajout à une position k de la liste Supprimer à une position k de la liste
liste * ajoutPosition(liste * P, float x, int k) liste * supprimePosition(liste * P, int k)
{ liste * nv=NULL ; liste * q=NULL ; int c ; { liste * q=NULL ; int c ; liste * tmp ;
if (k<1 || k>1+compte(P)) return P ; if (k<1 || k>compte(P)) return P ;
if (k==1) P=ajoutDebut(P,x) ; if (k==1) P=supprimeDebut(P) ;
else { q=P ; c=1 ; else { q=P ; c=1 ;
while (c<k-1) while (c<k-1)
{ q=q->next ; { q=q->next ;
c++ ; } c++ ; }
nv=(liste*) malloc(sizeof(liste)) ; tmp=q->next ;
nv->valeur=x ; q->next=q->next->next ;
nv->next=q->next ; free(tmp) ;
q->next=nv ; }
} return P;
return P; }
}
Compter les éléments de la liste Afficher les éléments de la liste
Int compte(liste * P) void affiche(liste * P)
{ if (P==NULL) return 0 ; { liste * q=P ;
else return 1+ compte(P->next) ; While (q!=NULL)
} { printf(″%f\n″,q->val) ;
q=q->next ; }
}
Trier une liste (croissant) Ajout dans une liste en Triant (décroissant)
void tri(liste * P) liste * ajouTri(liste * P, float x)
{ liste * q=P ; int c ; float aux ; { liste * q =NULL ; liste * nv=NULL ;
if (P !=NULL) if (P ==NULL || x>P->val) P=ajoutDebut(P,x) ;
do { c=0 ; else { q=P ;
q=P ; while(q->next!=NULL && x<q->next->val)
while (q->next !=NULL) q=q->next ;
{ if (q->val > q->next->val) nv=(liste*) malloc(sizeof(liste)) ;
{ aux=q->val ; nv->valeur=x ;
q->val=q->next->val ; nv->next=q->next ;
q->next->val=aux ; q->next=nv ;
c=1 ; } }
q=q->next ; return P ;
} }
} while (c !=0) ;
}
Inverser une liste par copie dans une autre liste Trier une liste par copie dans une autre (décroissant)
liste * inverse(liste * P) liste * triDecroissant(liste * P)
{ liste * Nv =NULL ; liste * q=NULL ; { liste * q=P ; liste Nv=NULL ;
if (P ==NULL || P->next==NULL) return P ; while(q !=NULL)
q=P ; { Nv=ajouTri(Nv,q->val) ;
while(q !=NULL) q=q->next ;
{ Nv=ajoutDebut(Nv,q->val) ; }
q=q->next ; return Nv ;
} }
return Nv ;
}
Première position d’un élément dans la liste Fusionner deux listes
int position(liste * P, float x) liste * Fusion(liste * P, liste * Q)
{ liste * q =NULL ; int c ; { liste * curs =P ;
if (P==NULL) return 0 ; if (P==NULL) P=Q ;
q=P ; c=1 ; else { curs=P ;
while(q !=NULL && x !=q->val) while(curs ->next!=NULL)
{ q=q->next ; curs=curs->next ;
c++ ; } curs->next=Q ;
if (q==NULL) return 0 ; // x pas trouvé }
else return c ; // x trouvé return P ;
} }
Occurrence d’un élément dans la liste Supprimer une valeur de la liste
int occurence(liste * P, float x) liste * supprimerValeur(liste * P, float x)
{ liste * q =P ; int c=0 ; { liste * q=P ;
while(q !=NULL) while (position(P,x) !=0)
{ if (x==q->val) c++ ; { c=position(P,x) ;
q=q->next ; } P=supprimePosition(P,c) ;
return c ; }
} return P ;
}
Trier un tableau en utilisant une liste (décroissant)
void triTableau(float * T, int n) q=P ; i=0 ; q=q->next ;
{ liste * P=NULL ; int i ; liste * q=NULL ; while (q !=NULL) i++ ;}
for (i=0 ; i<n ; i++) P=ajouTri(P,T[i]) ; { T[i]=q->valeur ; }

Vous aimerez peut-être aussi