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 :

fusion de deux liste simplement chainée


Sujet :

C

  1. #1
    Membre confirmé
    Inscrit en
    Novembre 2008
    Messages
    208
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 208
    Par défaut fusion de deux liste simplement chainée
    je veux faire fusion de deux liste simplement chaine

    a condition que la liste 1 est trier coissant

    de meme pour la liste 2




    j'ai base sur le principe de la fusion pour le tableau

    mais ca ne marche pas


    Code : 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
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
     
    #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 inserer_fin(list *l,int x)
    {
    noeud *e;
    e=(noeud*)malloc(sizeof(noeud));
    noeud *parcour=l->tete;
    e->info=x;
    e->suivant=NULL;
    if(l->tete==NULL)
    l->tete=e;
    else
    {
    while(parcour->suivant!=NULL)
    {
    parcour=parcour->suivant;
    }
    parcour->suivant=e;
    }
    }
     
     
     
    void affiche(list l)
    {
    noeud *parcour=l.tete;
    while(parcour!=NULL)
    {
    printf("%7d",parcour->info);
    parcour=parcour->suivant;
    }
    }
     
     
     
     
    void fusioner(list *l1,list *l2,list *l3)       // le probleme 
    {
    noeud *parcour1=l1->tete;
    noeud *parcour2=l2->tete;
    noeud *parcour3=l3->tete;
    while((parcour1!=NULL)&&(parcour2!=NULL))
    {
    if(parcour1->info<parcour2->info)
     {
      parcour3->info=parcour1->info;
      parcour3=parcour3->suivant;
      parcour1=parcour1->suivant;
      }
      else
      {parcour3->info=parcour2->info;
         parcour3=parcour3->suivant;
      parcour2=parcour2->suivant;
      }
    }
    while(parcour1!=NULL)
    {
     parcour3->info=parcour1->info;
      parcour3=parcour3->suivant;
      parcour1=parcour1->suivant;
     }
    while(parcour2!=NULL)
    {
     parcour3->info=parcour2->info;
         parcour3=parcour3->suivant;
      parcour2=parcour2->suivant;
     }
    }
     
     
    void main()
    {
    int v,n,i,n1,v1;
    list l1,l2,l3;
    init(&l1);
    init(&l2);
    init(&l3);
    printf("                            donner la premiere liste\n :");
    printf(" donner les nombres de noeud :");
    scanf("%d",&n);
    for(i=0;i<n;i++)
    {
    printf("donner la valeur :");
    scanf("%d",&v);
    inserer_fin(&l1,v);
     
    }
    printf("                            donner la deuxieme liste\n :");
    printf(" donner les nombres de noeud :");
    scanf("%d",&n1);
    for(i=0;i<n1;i++)
    {
    printf("donner la valeur :");
    scanf("%d",&v1);
    inserer_fin(&l2,v1);
    }
    fusioner(&l1,&l2,&l3);
    affiche(l3);
    }


    pouvez m'aidez

  2. #2
    Membre émérite Avatar de SofEvans
    Homme Profil pro
    Développeur C
    Inscrit en
    Mars 2009
    Messages
    1 082
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Développeur C

    Informations forums :
    Inscription : Mars 2009
    Messages : 1 082
    Par défaut
    Oui, on peut.

    Reste a nous machez un tant soit peu le travail quand meme.

    "Ca ne marche pas"
    Perdez cette habitude s'il vous plait.

    si vous postez, c'est bien que quelque chose vous chiffone.

    Decrivez mieux votre probleme, ecrivez et detailler toute info, meme si vous pensez que c'est inutile.

    Le compilo met une erreur ? Montrer la nous.


    "j'ai base sur le principe de la fusion pour le tableau"
    J'ai rien compris.

    Ah oui, encore un detail, indentez votre code, c'est vraiment tres important pour nous mais aussi pour vous.

  3. #3
    Membre confirmé
    Inscrit en
    Novembre 2008
    Messages
    208
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 208
    Par défaut
    je change un peu dans la fonction fusioner

    Code : 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
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
     
     
    #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 fusioner(list *l1,list *l2,list *l3)
    {
    noeud *parcour1=l1->tete;
    noeud *parcour2=l2->tete;
    noeud *parcour3=l3->tete;
     
    while((parcour1!=NULL)&&(parcour2!=NULL))
    {
    if(parcour1->info<parcour2->info)
    {
    insertion_fin(l3,parcour1->info);
     
    parcour1=parcour1->suivant;
    }
    else
    {
    insertion_fin(l3,parcour2->info);
     
    parcour2=parcour2->suivant;
    }
    }
    while(parcour1!=NULL)
    {
    insertion_fin(l3,parcour1->info);
     
    parcour1=parcour1->suivant;
    }
    while(parcour2!=NULL)
    {
    insertion_fin(l3,parcour2->info);
     
    parcour2=parcour2->suivant;
    }
    }
     
     
     
     
     
    void afficher(list l)
    {
    noeud *parcour =l.tete;
    while(parcour!=NULL)
    {
    printf("%7d",parcour->info);
    parcour=parcour->suivant;
    }
     
    }
     
     
     
     
    void main()
    {
    list l1,l2,l3;
    int n,v,n2,x,i
    ;
    init(&l1);
    init(&l2);
    printf("\n donner la premiere liste\n\n");
    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(&l1,v);
    }
     
    printf("\n donner la deuxieme liste\n\n");
    printf("donnez le nombre des noeuds a inserer :");
    scanf("%d",&n2);
    for(i=0;i<n2;i++)
    {
    printf("donnez une valeur : ");
     
    scanf("%d",&x);
    insertion_fin(&l2,x);
    }
     
     
    fusioner(&l1,&l2,&l3);
     
    afficher(l3);
     
    getch();
    }

    j'execute le code mais a l'execution il se bloque

  4. #4
    Membre émérite Avatar de SofEvans
    Homme Profil pro
    Développeur C
    Inscrit en
    Mars 2009
    Messages
    1 082
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Développeur C

    Informations forums :
    Inscription : Mars 2009
    Messages : 1 082
    Par défaut
    Bon, la, je suis de méchante humeur, alors je vais être méchant.

    Tu n'as suivi aucun des conseil que je t'ai donné. Alors relis mon post, et remplace chacun des conseil gentiment dis par un ordre.

  5. #5
    Membre confirmé
    Inscrit en
    Novembre 2008
    Messages
    208
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 208
    Par défaut
    voila l'erreur

    Thread 1 stopped C:\Documents and Setting\ayken\Bureau\test.exe:Fault:access violation at 0x4010b2:read of address 0x83ec8b59

  6. #6
    Expert confirmé
    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
    Par défaut
    L'erreur vient de ce que l3 n'est pas initialisée !

    Note :
    Comme mentionné plus haut par SofEvans, l'indentation correcte d'un code est INDISPENSABLE (surtout si tu veux obtenir que d'autres le lisent pour t'aider)

  7. #7
    Membre confirmé
    Inscrit en
    Novembre 2008
    Messages
    208
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 208
    Par défaut
    merci c resolu

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Fusion de deux listes chainées
    Par schwuleur dans le forum Langage
    Réponses: 5
    Dernier message: 23/05/2011, 15h42
  2. Tri d'une pile avec liste simplement chainée
    Par thecabbages dans le forum C
    Réponses: 3
    Dernier message: 17/12/2009, 21h08
  3. question liste simplement chainée
    Par american dans le forum Débuter avec Java
    Réponses: 2
    Dernier message: 15/03/2009, 21h45
  4. Réponses: 3
    Dernier message: 25/10/2006, 19h08
  5. Liste simplement chainée
    Par sorry60 dans le forum C
    Réponses: 54
    Dernier message: 29/11/2005, 22h05

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