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
Yassine - 3 juin 2011 à 23:42
A voir également:
- Ajouter un élément dans une liste chaînée en c
- Liste déroulante excel - Guide
- Liste déroulante en cascade - Guide
- Ajouter un compte gmail - Guide
- Ajouter un compte whatsapp - Guide
- Comment ajouter une personne sur whatsapp dans un groupe - Guide
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
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.
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.
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
27 févr. 2010 à 13:07
Salut,
Est-ce que tu connais les listes chaînée en C ou pas du tout?
Est-ce que tu connais les listes chaînée en C ou pas du tout?
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
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 .
est vs pouvez l'algorithme ou la traduction en c .
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");}
#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");}
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
27 févr. 2010 à 13:27
si j les connais