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
A voir également:
- Liste simplement chaine
- Liste déroulante excel - Guide
- Liste code ascii - Guide
- Liste déroulante en cascade - Guide
- Chaine tnt gratuite sur mobile - Guide
- Chaine radio - Télécharger - Médias et Actualité