1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148
|
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define N 3
typedef struct element
{
int val;
struct element *nxt;
} element, *llist;
llist ajouter(llist liste, int i)
{
/* On crée un nouvel élément */
llist nouveauElement = malloc(sizeof(element));
/* On assigne la valeur au nouvel élément */
printf("\n\nIntroduisez la %d(ere/eme) valeur : ",i);
scanf("%d", &nouveauElement->val);//Pourquoi ça marche pas sans le & ??
nouveauElement->nxt = NULL;
/* On ajoute en fin, donc aucun élément ne va suivre */
if(liste == NULL)
{
liste = nouveauElement;
}
else
{
/* Sinon, on parcourt la liste à l'aide d'un pointeur temporaire et on
indique que le dernier élément de la liste est relié au nouvel élément */
llist temp = liste;
while(temp->nxt != NULL)
{
temp = temp->nxt;
}
temp->nxt = nouveauElement;
}
nouveauElement = NULL;
free(nouveauElement);
return liste;
}
void afficher(llist liste)
{
int i;
llist tmp = liste;
/* Tant que l'on n'est pas au bout de la liste */
for(i = 1; tmp != NULL; i++)
{
/* On affiche */
printf("\n\nLa %d(ere/eme) valeur est : %d", i, tmp->val);
/* On avance d'une case */
tmp = tmp->nxt;
}
}
llist rechercher(llist liste1, llist liste2, llist liste3)
{
llist tmp1 = liste1;
/* Tant que l'on n'est pas au bout de la liste */
while(tmp1 != NULL)
{
llist tmp2 = liste2;
while (tmp2 != NULL)
{
if (tmp1->val == tmp2->val)
{
llist nouveauElement = malloc(sizeof(element));
/* On assigne la valeur au nouvel élément */
nouveauElement->val = tmp2->val;
nouveauElement->nxt = NULL;
if(liste3 == NULL)
{
liste3 = nouveauElement;
}
else
{
/* Sinon, on parcourt la liste à l'aide d'un pointeur temporaire et on
indique que le dernier élément de la liste est relié au nouvel élément */
llist temp=liste3;
while(temp->nxt != NULL)
{
temp = temp->nxt;
}
temp->nxt = nouveauElement;
}
nouveauElement = NULL;
free(nouveauElement);
}
tmp2 = tmp2->nxt;
}
tmp1 = tmp1->nxt;
}
printf("\n-------------------TEST-----------------");
afficher(liste3);//Pourquoi ici ça marche ??
printf("\n-------------------TEST-----------------\n");
return liste3;
}
main()
{
llist maListe1 = NULL;
llist maListe2 = NULL;
llist listeCommune = NULL;
int i = 0;
printf("\nENTREZ LES VALEURS DE LA PREMIERE LISTE :\n");
printf("----------------------------------------");
for(i = 1; i <= N; i++)
{
maListe1 = ajouter(maListe1, i);
}
printf("\nENTREZ LES VALEURS DE LA DEUXIEME LISTE :\n");
printf("----------------------------------------");
for(i = 1; i <= N; i++)
{
maListe2 = ajouter(maListe2, i);
}
printf("\nLES VALEURS DE LA PREMIERE LISTE SONT :\n");
printf("--------------------------------------");
afficher(maListe1);// Ici aussi ça marche !!
printf("\n\nLES VALEURS DE LA DEUXIEME LISTE SONT :\n");
printf("--------------------------------------");
afficher(maListe2);// Et ici aussi !!??
rechercher(maListe1, maListe2, listeCommune);
printf("\n\nLES VALEURS DE LA LISTE COMMUNE SONT :\n");
printf("-------------------------------------");
afficher(listeCommune);// Et pourquoi ici ça marche pas ??
} |
Partager