Liste chainée en language c

essaitiano Messages postés 11 Date d'inscription   Statut Membre Dernière intervention   -  
 Yassine -
Bonjour,
Bonjour,
svp j'ai besoin de votre aide c urgent
je cherche la traduction en language c d'un prog qui permet de fusionner deux listes chainées triées dans une 3eme triée.
et la traduction d' un autre qui permet d'afficher l'intersection entre deux listes chainées.
merci d'avance
A voir également:

5 réponses

lami20j Messages postés 21331 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 570
 
Salut,

En ce cas pour fusionner deux listes chaînées tu dois savoir que tu as par exemple plusieurs possibilités.

Si tu ne veux pas altérer les listes initiales il suffit de déclarer un nouveau pointeur de liste et ensuite insérer toutes les éléments de la liste 1 et ensuite les éléments de la liste 2.

Sinon tu peux parcourir la liste 1 jusqu'à la fin et faire pointer le pointeur suivant de dernier élément sur le le 1er élément de la liste 2 (en bref sur le pointeur de tête de la liste 2)

Si pendant la création de la liste tu as prévu la sauvegarde des pointeurs de tête et de queue pour les listes alors tu ne seras plus obliger avec l'opération couteuse de déplacement jusqu'à la fin de la liste.

2
lami20j Messages postés 21331 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 570
 
Salut,

Est-ce que tu connais les listes chaînée en C ou pas du tout?
0
essaitiano Messages postés 11 Date d'inscription   Statut Membre Dernière intervention  
 
le problème que les 2 listes sont triées et peuvent contenir les memes valeurs .
est vs pouvez l'algorithme ou la traduction en c .
0
Yassine
 
voila comment fusionner 2 listes chainées A et B:

#include<stdio.h>
#include<stdlib.h>
typedef struct Element Element;
struct Element
{
int nombre;
Element *suivant;
};

typedef struct Liste Liste;
struct Liste
{
Element *premier;
};

Liste *initialisation()
{
Liste *liste = malloc(sizeof(*liste));
Element *element = malloc(sizeof(*element));
if (liste == NULL || element == NULL)
{
exit(EXIT_FAILURE);
}
element->nombre = 0;
element->suivant = NULL;
liste->premier = element;
return liste;
}

void insertion(Liste *liste, int nvNombre)
{
/* Création du nouvel élément */
Element *nouveau = malloc(sizeof(*nouveau));
if (liste == NULL || nouveau == NULL)
{
exit(EXIT_FAILURE);
}
nouveau->nombre = nvNombre;
/* Insertion de l'élément au début de la liste */
nouveau->suivant = liste->premier;
liste->premier = nouveau;
}

void afficherListe(Liste *liste)
{
if (liste == NULL)
{
exit(EXIT_FAILURE);
}
Element *actuel = liste->premier;
while (actuel != NULL)
{printf("\t%d\t", actuel->nombre);
actuel = actuel->suivant;
}
printf("NULL\n");
}

void *fusioner(Liste *A,Liste *B)
{

Element *D=A->premier;
while(D->suivant!=NULL)
{
D=D->suivant;
}
D->suivant=B->premier;
B->premier=A->premier;
afficherListe(B);
}

main()
{ int i,j;

Liste *maListe = initialisation();

for(i=1;i<=10;i++)
{insertion(maListe,rand()%100);

}
Liste *maliste2=initialisation();
for(i=1;i<=10;i++){
insertion(maliste2,rand()%1000);}
fusioner(maListe,maliste2);
system("pause");}
0

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

Posez votre question
essaitiano Messages postés 11 Date d'inscription   Statut Membre Dernière intervention  
 
si j les connais
-1