IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 C Discussion :

trie d'une liste chainée


Sujet :

C

  1. #1
    Membre à l'essai
    Homme Profil pro
    ecole superieure de technologie
    Inscrit en
    Novembre 2011
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : Maroc

    Informations professionnelles :
    Activité : ecole superieure de technologie
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2011
    Messages : 34
    Points : 24
    Points
    24
    Par défaut trie d'une liste chainée
    bonjour
    j'ai juste une question :
    est ce que les tris (tri par selection , tri par insertion , tri a bulle) qui s'appliquent sur les tableaux sont valables pour les listes chainées ??
    j'ai appliqué le tri par selection mais ca ne donne rien
    et merci

  2. #2
    Membre à l'essai
    Homme Profil pro
    ecole superieure de technologie
    Inscrit en
    Novembre 2011
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : Maroc

    Informations professionnelles :
    Activité : ecole superieure de technologie
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2011
    Messages : 34
    Points : 24
    Points
    24
    Par défaut tri par selection d'une liste chainée
    bonjour
    je veux trier une liste chainée et j'ai choisis le tri par selection que j'ai bien assimilé
    voila le code que j'ai proposé mais ca marche pas je suis sur qu'il ya un probleme
    Code c : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    #include<stdio.h>
    #include<conio.h>
    #include<stdlib.h>
    typedef struct element{
           int val ;
           struct element *next ;
           }element ;
    int main(){
        element *p , *l , *s ,*m , *k , *aide  ;
     
        int i , n , max ;
        printf("entrez le nombre d'elements");
        scanf("%d",&n);
        l=(element *)malloc(sizeof(element));
        scanf("%d",&l->val);
        l->next=NULL ;
        p=l ;
        for(i=0 ; i<(n-1) ; i++)
        {
                s=(element*)malloc(sizeof(element));
                scanf("%d",&s->val);
                p->next=s ; 
                s->next=NULL ;
                p=p->next ;
                }
     
        p=l ;
        while(p->next!=NULL)
        {
     
                        p=p->next ;
     
                            }
     
                    printf("\n");
     
         for(s=l ; (s!=NULL) ; s=s->next)
         {
                   m=s ;
                   for(k=s->next ; k!=NULL ; k=k->next)
                   {
                             if((k->val)>(m->val)) m=k ;
                             }
                   *aide=*m;
                   *m=*s ;
                   *s=*aide ;
     
                   }
           p=l ;
     
     
            do
            {
                printf("%d",p->val);
                p=p->next ;
                }while(p!=NULL);
     
        getch();
    }
    merci d'avance

  3. #3
    Membre expérimenté Avatar de Trademark
    Profil pro
    Inscrit en
    Février 2009
    Messages
    762
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 762
    Points : 1 396
    Points
    1 396
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
        p=l ;
        while(p->next!=NULL)
        {
     
                        p=p->next ;
     
                            }
    Tu assignes p au début de la liste et tu vas à la fin alors que p était déjà à la fin...

    Enfin ça c'est le détail qui prouve que t'as même pas pris la peine de relire ton code.
    Pire encore, as-tu vu l'indentation du code que tu nous proposes ? C'est illisible, d'autant plus que tes noms de variable ne veulent strictement rien dire. Un code dégueulasse c'est ne pas respecter celui qui le maintiendra, mais encore pire ici, celui qui t'aidera !

    Donc tu nous fait le plaisir d'éditer ton commentaire avec un code clair que tu as relu et dont tu as réfléchi à l'algorithmique sur un papier avec ton crayon et ta gomme. En plus, avec un peu de chance, tu trouveras ton erreur comme un grand (bien que tu ne nous ai pas dit pourquoi ton code ne marchait pas, encore du non-respect, on doit chercher ce qui ne marche pas).

  4. #4
    Expert éminent sénior
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Points : 13 926
    Points
    13 926
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
         for(s=l ; (s!=NULL) ; s=s->next)
         {
            m=s ;
            for(k=s->next ; k!=NULL ; k=k->next)
            {
               if((k->val)>(m->val)) m=k ;
            }
            *aide=*m;
            *m=*s ;
            *s=*aide ;
     
         }
    Aucun champ next n'a été modifié et la liste reste inchangée.
    Attention, pour échanger la position de deux cellules, il faut ici modifier le champ next des cellules qui précèdent les cellules à déplacer.

    Illustration : échanger les cellules n et p. Les champs next en rouge sont à modifier.
    Avant :
      -->n-1 >--->  n >--> n+1>--...--> p-1 ---->  p >-->  p+1>-- ...
    Après :
                     --------------------------------------
                    |        ---------------------         |
                    |       |                     |        |
                    ^       v                     ^        v
      -->n-1        n      n+1>-- ...-->p-1       p       p+1>-- ...
           v        ^                   v         ^
           |        |                   |         |
           |         -------------------          |
            --------------------------------------

Discussions similaires

  1. [diogene]le trie d'une liste chainée help
    Par mrism000 dans le forum C
    Réponses: 0
    Dernier message: 20/05/2012, 19h58
  2. Réponses: 2
    Dernier message: 10/10/2005, 02h25
  3. [Stratégie]Sauvegarde d'une liste chainée dans un fichier
    Par BernardT dans le forum Général Java
    Réponses: 17
    Dernier message: 25/07/2005, 17h04
  4. manipulation d'une liste chainé
    Par sorari dans le forum C++
    Réponses: 1
    Dernier message: 16/03/2005, 12h32

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo