Vous êtes sur la page 1sur 6

Ecole prparatoire en Sciences et Techniques d'Alger

Algorithmique 2 et structures de donnes avances


2me anne, Semestre 3, 2012/2013

TD & TP Sur les listes chanes


Exercice N01:
Soit Entete une liste chaine des entiers :
1) Donner la dclaration de la structure Entete ;
2) Ecrire une fonction qui construit la Liste chaine Entete travers
des donnes saisies par lutilisateur (clavier et se terminant par
zro) avec lutilisation de la fonction dallocation new.
3) Ecrire une fonction qui ajoute un lment en dbut de la liste
Entete.
Exercice N 02:
Soient LB une liste chaine bidirectionnelle des entiers.
a) Donner la dclaration de la structure de la chaine LB
b) Ecrire une fonction constr_list() qui construit cette liste LB
partir dune suite dentiers se terminant par zro (0 est inclus)
saisie par lutilisateur (clavier).
c) Ecrire une fonction qui recherche et retourne ladresse dune
valeur donne dans la liste LB
Exercice N03 :
Soit la liste chane L, dfinie ci-dessous, reprsentant des donnes dindividus. Pour chacun
on mmorise les donnes suivantes : son matricule, son nom et sa taille.
typedef struct
{ int mat;
char nom[30];
float taille;
Liste * suiv;
} Liste;
Liste *L ;
1. Ecrire une fonction qui permet d'ajouter un individu la fin de la liste.
Cette fonction reoit la tte de la liste et les donnes de l'individu.

Ecole prparatoire en Sciences et Techniques d'Alger


Algorithmique 2 et structures de donnes avances
2me anne, Semestre 3, 2012/2013
2. Ecrire une fonction qui permet d'ajouter un individu la position i.
Cette fonction reoit la tte de la liste, la position i et les donnes de
l'individu.
3. Ecrire une fonction qui affiche successivement tous les lments de la
liste.
4. Ecrire une fonction qui supprime un individu en dbut de liste. Cette
fonction reoit la tte de la liste.
5. Ecrire une fonction qui supprime un individu en fin de liste. Cette
fonction reoit la tte de la liste.
6. Ecrire une fonction qui supprime un individu de la liste. Cette fonction
reoit la tte de la liste et le matricule de lindividu.
7. Ecrire une fonction qui reoit la tte de la liste et renvoie la moyenne
des tailles des individus de la liste.
Exercice N4 :
Soient T1 et T2 deux tableaux de 30 entiers chacun et L une liste
chaine des entiers.
1- Donner la dclaration des tableaux T1, T2 et de la liste L en C++.
Ecrire une fonction Fus_Tab_list (T1, T2), qui fusionne deux tableaux T1
et T2 dj tris dans une liste chaine.
Exercice N5:
1- Ecrire (en C/C++) une fonction rcursive detrui_invrs(L), qui
dtruit une liste chaine L dentiers dans lordre inverse cest-adire partir du dernier lment de la liste. Exemple :
- La liste T est : -> 5(1er) ->29 ->3 ->13 ->45 ->87 (dernier
lment)
- Ordre de suppression est : 87 puis 45 puis 13 puis 3 puis
29 en fin 5
2- Ecrire une fonction qui retourne la valeur max de cette liste
dentiers partir de la position k.

Ecole prparatoire en Sciences et Techniques d'Alger


Algorithmique 2 et structures de donnes avances
2me anne, Semestre 3, 2012/2013
Solutions :
Exercice N 01:
Rponse N1:
typedef struct
{
int val;
List *Suiv;
} List;
List *L;
Rponse N2:
List *constr_list()
{ int a;
List *tmp,*L;
cout << "Saisie 1er valeur entier: ";
cin >> a;
tmp=new List ;
if (!tmp) {cout << "Espace mmoire insuffisante "; return
NULL; }
tmp->val=a;tmp->Suiv=NULL;
L=tmp;
while (a!=0)
{
cout << "Saisie une valeur entier: ";
cin >> a;
tmp->Suiv=new List;
if (tmp->Suiv)
{
tmp=tmp->Suiv;
tmp->val=a; tmp->Suiv=NULL;
}
else {cout << "Espace mmoire insuffisante "; return
L;}
}
return L;
}
Rponse N3:
bool Ajout_Debut_list(List **L, int a)
{ List *tmp;
tmp=new List ;
if (!tmp) {cout << "Espace mmoire insuffisante "; return
0; }
tmp->val=a;tmp->Suiv=*L;

Ecole prparatoire en Sciences et Techniques d'Alger


Algorithmique 2 et structures de donnes avances
2me anne, Semestre 3, 2012/2013
*L=tmp; }

Exercice N 02:
Rponse Na:
typedef struct
{
int val;
List *Suiv;
List *Prec;
} List;
List *LB;
Rponse Nb:
List *constr_list()
{ int a;
List *tmp,*L;
cout << "Saisie 1er valeur entier: ";
cin >> a;
tmp=new List ;
if (!tmp) {cout << "Espace mmoire insuffisante "; return
NULL; }
tmp->val=a;tmp->Suiv=NULL; tmp->Prec=NULL;
L=tmp;
while (a!=0)
{
cout << "Saisie une valeur entier: ";
cin >> a;
tmp->Suiv=new List;
if (tmp->Suiv)
{
(tmp->Suiv)->Prec=tmp;
tmp=tmp->Suiv;
tmp->val=a; tmp->Suiv=NULL;
}
else {cout << "Espace mmoire insuffisante "; return
L;}
}
return L;
}
Rponse Nc:
List *Rech_val_list(int x, List *L)

Ecole prparatoire en Sciences et Techniques d'Alger


Algorithmique 2 et structures de donnes avances
2me anne, Semestre 3, 2012/2013
{ List *tmp;
tmp=L;
while ((tmp!=NULL)&&(tmp->val!=x))
tmp=tmp->Suiv;
return tmp; }
Exercice N 4:
Rponse N1 :
Int T1[30], T2[30] ;
typedef struct List
{
int val;
struct List *Suiv;
} L;
Rponse N2 :
List *Fus_Tab_list (int T1[30],int T2[30])
{ List *tmp, *L;
int i=0,j=0;
L=new List;
if (!L) {cout << "Allocation mmoire impossible ";
return L;}
else
{tmp=L;tmp->Suiv=NULL; ;if (T1[i]>T2[j]) {L>val=T2[j]; j++;} else {L->val=T1[i]; i++;}}
while ((i<30)&&(j<30))
{ tmp->Suiv=new List;
if (!tmp->Suiv) {cout << "Allocation mmoire
impossible "; return L;}
else
{ tmp=tmp->Suiv;
if (T1[i]>T2[j]) {tmp->val=T2[j]; j++;}
else {tmp->val=T1[i]; i++;}
tmp->Suiv=NULL;
}
}
while (i<30) {tmp->Suiv=new List;if (!tmp->Suiv) {cout
<< "Allocation mmoire impossible "; return L;}
else {tmp->val=T1[i]; i++; tmp>Suiv=NULL;} }
while (j<30) {tmp->Suiv=new List;if (!tmp->Suiv) {cout
<< "Allocation mmoire impossible "; return L;}
else {tmp->val=T2[j]; j++;tmp>Suiv=NULL;} }
tmp->Suiv=NULL;
return L;
}

Ecole prparatoire en Sciences et Techniques d'Alger


Algorithmique 2 et structures de donnes avances
2me anne, Semestre 3, 2012/2013

Exercice N5:
Rponse N1 :
void detrui_invrs(List **L)
{
if (*L)
if ((*L)->Suiv)
detrui_invrs(&((*L)->Suiv));
delete *L;
}
Rponse N2 :
int Rech_max(List *L, int k)
{
int max, i=1;
while ((i<k)&&L)
{L=L->Suiv;i++;}
if (L) max=L->val;
else return 0 ;
while(L)
{ if (max<(L->val)) max= L->val;
L=L->Suiv;}
return max;
}