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 ; }