Liste simplement chaine
mb42
Messages postés
553
Statut
Membre
-
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
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
Configuration: Windows XP Firefox 3.5.7
3 réponses
-
il t'affiche des erreurs ? Si oui lesquelles ?
-
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 -
voila l'erreur
Thread 1 stopped C:\Documents and Setting\ayken\Bureau\test.exe:Fault:access violation at 0x4010b2:read of address 0x83ec8b59