Liste simplement chaine

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

j'ai deux liste d'entier qui sont trier (coissant)

je veux faire fusion de deux liste dans une nouvelle liste

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

le principe de fusion je suppose qu'il est juste

#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();
}

merci d'avance
A voir également:

3 réponses

Arya Dröttningu Messages postés 650 Statut Membre 157
 
il t'affiche des erreurs ? Si oui lesquelles ?
0
mb42 Messages postés 553 Statut Membre 7
 
apres entrer les valeur de deux liste

et quand je tape il "se bloque"

donc soit un probleme au niveau de la fonction fusion soit un syntaxe est errone

je suppose que le deux liste l1 et l2 devront etre envoyer par valeur non comme pointeur

pouvons voir le code de la fonction fusion
0
mb42 Messages postés 553 Statut Membre 7
 
voila l'erreur

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