Comment trier une liste simplement chaine

mb42 Messages postés 553 Statut Membre -  
 es-said -
Bonjour,

je n'arrive pas a faire le trie d'une liste simplement chaine (peu n'importe croissant ou decroissant)

merci d'avance
Configuration: Windows XP
Firefox 3.5.7

5 réponses

  1. mb42 Messages postés 553 Statut Membre 7
     
    qu'esque vous pensez de ce code

    c 'est un code complet contient ( 4 fonction avec main)

    mais le probleme suppose toujour a la fonction trie

    je parle toujour des liste simplement chaine

    #include<stdio.h>
    #include<conio.h>
    #include<stdlib.h>
    typedef struct noeud
    {
    int info;
    struct noeud *suivant;
    }noeud;

    typedef struct
    {noeud *tete;
    }list;

    void init(list *l)
    {
    l->tete=NULL;
    }

    void insertion_fin(list *l,int y)
    {
    noeud *e;
    e=(noeud*)malloc(sizeof(noeud));
    noeud *parcour =l->tete;
    e->info=y;
    e->suivant=NULL;
    if(l->tete==NULL)
    {
    l->tete=e;
    }
    else
    {
    while(parcour->suivant!=NULL)
    {
    parcour=parcour->suivant;
    }
    parcour->suivant=e;
    }
    }

    void trier(list *l) // le probleme est la
    {
    noeud *precedent=l->tete;
    noeud *parcour=precedent->suivant;
    int temp,min;
    while(precedent!=NULL)
    {
    min=precedent->info;
    while(parcour!=NULL)
    {
    if(parcour->info<min)
    min=parcour->info;
    parcour=parcour->suivant;
    }
    if(precedent->info!=min)
    {
    temp= precedent->info;
    precedent->info=min;
    min=temp;
    }
    precedent=precedent->suivant;
    }
    }

    void afficher(list l)
    {
    noeud *parcour =l.tete;
    while(parcour!=NULL)
    {
    printf("%7d",parcour->info);
    parcour=parcour->suivant;
    }

    }

    void main()
    {
    list l;
    int n,vi;
    init(&l);
    printf("donnez le nombre des noeuds a inserer :");
    scanf("%d",&n);
    for(i=0;i<n;i++)
    {
    printf("donnez une valeur : ");

    scanf("%d",&v);
    insertion_fin(&l,v);
    }
    trier(&l);
    afficher(l);

    getch();
    }
    3