Liste chainée en language c

Fermé
essaitiano Messages postés 11 Date d'inscription vendredi 26 février 2010 Statut Membre Dernière intervention 5 décembre 2017 - 27 févr. 2010 à 12:44
 Yassine - 3 juin 2011 à 23:42
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 jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 569
27 févr. 2010 à 13:42
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 jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 569
27 févr. 2010 à 13:07
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 vendredi 26 février 2010 Statut Membre Dernière intervention 5 décembre 2017
27 févr. 2010 à 16:45
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
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 vendredi 26 février 2010 Statut Membre Dernière intervention 5 décembre 2017
27 févr. 2010 à 13:27
si j les connais
-1