Problème en C

lemizo -  
 foufa_belle -
Bonjour à tous,voilà j'aimerai écrire un programme qui permet de fusionner deux listes chaînées d’entiers triées par ordre croissant en une troisième liste telle que celle-ci contienne les éléments de la liste1 et les
éléments de la liste2 triés par ordre croissant.


voici mon code:
Ps je n'ai pas terminer l'exercice.



// Bibliothèques

#include <stdio.h>
#include <string.h>
#include <conio.h>
#include <stdlib.h>

// Différentes structures

typedef struct {
int a;
}nombre;
struct cellule{
nombre N;
struct cellule *suivant;
};
typedef struct cellule *liste;

//Différents prototypes

liste inser(liste l,nombre A);
void affiche(liste l);
liste clas_ment(liste l);

//Début du main()
int main()
{
system("color 2F");
nombre E;
liste tete= NULL,tete1= NULL;
int x,i,y;

printf("\n\tCombien de chiffres pour la pr\202mi\212re liste: ");
scanf("%d",&x);
printf("\tVeuillez remplir la liste1\n");
for(i=0;i<x;i++)
{
printf("num%d= ",i);
scanf("%d",&E.a);
tete = inser(tete,E);
}
printf("\n\n\tCombien de chiffres pour la liste2: ");
scanf("%d",&y);
printf("\tVeuillez remplir la liste2\n");
for(i=0;i<y;i++)
{
printf("num%d= ",i);
scanf("%d",&E.a);
tete1 = inser(tete1,E);
}
printf("\n\nVoici vos deux listes avant traitement");
printf("\n\nListe1:");
affiche(tete);
printf("\n\nListe2:");
affiche(tete1);

tete = clas_ment(tete);
tete1 = clas_ment(tete1);
printf("\n\nVoici vos deux listes apr\212s classement");
printf("\n\nListe1:");
affiche(tete);
printf("\n\nListe2:");
affiche(tete1);


getch();
return 0;
}

// Fin du main()

//Début des fonction sécondaires

//------------------------------------------------------------------------------
liste inser(liste l,nombre A)
{
liste mc = (liste)malloc(sizeof(struct cellule));

mc->N = A;
mc->suivant = l;
l = mc;
return l;
}
//------------------------------------------------------------------------------

void affiche(liste l)
{
liste prec = l;
while(prec != NULL)
{
printf("\t%d",prec->N.a);
prec=prec->suivant;
}
}

//------------------------------------------------------------------------------

liste clas_ment(liste l)
{
liste prec,suiv,juge = (liste)malloc(sizeof(struct cellule));
prec = l;
suiv = l->suivant;

while(suiv != NULL)
{
while(prec->N.a > suiv->N.a)
{
juge->N.a = prec->N.a;
prec->N.a = suiv->N.a;
suiv->N.a = juge->N.a;
}
prec = suiv;
suiv = suiv->suivant;
}

return l;

6 réponses

Utilisateur anonyme
 
salut ! alors petite question : un fois la liste1 et la 2 triée, tu veux juste concaténer ?? ou alors ca va trier les liste ? en gros :
liste 1 : 1-2-3-4-5-6
liste 2 :2-4-8-9

tu veux : liste 3 : 1-2-3-4-5-6-2-4-8-9 ou 1-2-2-3-4-4-5-6-8-9?

car dans les deux cas, c est différent :
cas 1 : tu crée juste la structure avec la bonne taille et tu enregistre les variables comme elles sont

cas 2 : tu crée juste la structure avec la bonne taille et tu enregistre les variables comme elles sont puis tu les classes ...
0
foufa_belle
 
c tré simple tu parcours la premiere liste et pour chaque élemen de la liste 1 tu parcours la liste 2 si tu trouve une valeur plu petite tu l insere en 3 el tu continue a parcourir la liste 2 sinon tu insere l elemen de la liste 1 et tu avance dans cette liste!! si c pas clair j t expliquerai encore +
0
Utilisateur anonyme
 
euh perso j'aurai tout mis dans la liste 3 et j'aurais utilisé l'algo de tri deja existant qui aurait trié les nombres nan?
0
foufa_belle
 
oui tu peux faire de cette maniére mai celle que je t'ai parlé est beaucoup plus simple parceque tu fai toujours une insertion enfin de la liste 3!! mais la tienne n'est pas mal si tu sais bien manipuler les listes chainées!!
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Utilisateur anonyme
 
les deux sont viables. En fait la mienne est pour les flemmard , y a des mathématiciens qu'ont deja fait l'algo de tri alors on se prend pas la tête a le refaire x)
0
foufa_belle
 
tant que sa te convient de faire cette methode c bon tu peux l'en faire :))
0