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
| #include <stdio.h>
#include <string.h>
typedef struct {
char nom[100];
char profession[100];
} Citoyen;
typedef struct n {
struct n *suiv;
struct n *prec;
Citoyen citoyen;
} N;
void EchangerNoeuds(N * e1, N * e2);
void AfficherListe(N * pListe);
int main()
{
N A, B, C, D;
strcpy(A.citoyen.nom, "A");
A.prec = NULL;
A.suiv = &B;
strcpy(B.citoyen.nom, "B");
B.prec = &A;
B.suiv = &C;
strcpy(C.citoyen.nom, "C");
C.prec = &B;
C.suiv = &D;
strcpy(D.citoyen.nom, "D");
D.prec = &C;
D.suiv = NULL;
/* A est actuellement la tete de liste */
AfficherListe(&A);
EchangerNoeuds(&A, &C);
/* C est maintenant la tete de liste */
AfficherListe(&C);
return 0;
}
void EchangerNoeuds(N * e1, N * e2)
{
if (e1 != e2)
{
N * p1, * s1, * p2, * s2;
p1 = e1->prec;
s1 = e1->suiv;
p2 = e2->prec;
s2 = e2->suiv;
e2->prec = (p1 != e2 ? p1 : e1);
e2->suiv = (s1 != e2 ? s1 : e1);
e1->prec = (p2 != e1 ? p2 : e2);
e1->suiv = (s2 != e1 ? s2 : e2);
if (p1 != NULL && p1 != e2)
p1->suiv = e2;
if (s1 != NULL && s1 != e2)
s1->prec = e2;
if (p2 != NULL && p2 != e1)
p2->suiv = e1;
if (s2 != NULL && s2 != e1)
s2->prec = e1;
}
}
void AfficherListe(N * pListe)
{
N * i;
for(i = pListe; i != NULL; i = i->suiv)
printf("%s\n", i->citoyen.nom);
printf("\n");
} |
Partager