Liste simplement chaine

Fermé
mb42 Messages postés 432 Date d'inscription vendredi 17 octobre 2008 Statut Membre Dernière intervention 14 janvier 2014 - 12 janv. 2010 à 18:13
mb42 Messages postés 432 Date d'inscription vendredi 17 octobre 2008 Statut Membre Dernière intervention 14 janvier 2014 - 13 janv. 2010 à 13:06
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 581 Date d'inscription mardi 12 janvier 2010 Statut Membre Dernière intervention 3 janvier 2019 157
12 janv. 2010 à 18:14
il t'affiche des erreurs ? Si oui lesquelles ?
0
mb42 Messages postés 432 Date d'inscription vendredi 17 octobre 2008 Statut Membre Dernière intervention 14 janvier 2014 7
12 janv. 2010 à 18:25
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 432 Date d'inscription vendredi 17 octobre 2008 Statut Membre Dernière intervention 14 janvier 2014 7
13 janv. 2010 à 13:06
voila l'erreur

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