Fusion de deux liste simplement chaine

Fermé
mb42 Messages postés 432 Date d'inscription vendredi 17 octobre 2008 Statut Membre Dernière intervention 14 janvier 2014 - 11 janv. 2010 à 01:26
Pacorabanix Messages postés 3248 Date d'inscription jeudi 23 août 2007 Statut Membre Dernière intervention 19 mai 2013 - 9 févr. 2013 à 20:56
Bonjour,


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]
#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);
}
/CODE



pouvez m'aidez
A voir également:

2 réponses

Pacorabanix Messages postés 3248 Date d'inscription jeudi 23 août 2007 Statut Membre Dernière intervention 19 mai 2013 660
11 janv. 2010 à 02:14
bonjour,

pour les balises code, c'est avec "< code >" pas "[ code ]" (sans espaces) (bouton avec gras italique, souligné).

Ensuite concernant ton code, le principe a l'air correct, mais je ne peux que te conseiller d'utiliser la fonction "Inserer_tete" que tu as crées pour ajouter les noeud à list3 . Tu as codé la manière correcte de le faire, alors il faut justement l'utiliser, car aucun noeud n'est correctement crée pour list3.
0