Vous êtes sur la page 1sur 6

TD3 : les listes, les piles et les files Université de Batna 2 Algorithmique et structures de données

TD3

Partie1 : les listes :

Exercice1 : (liste chainée)

Soit Li une liste d’étudiants pour une classe donnée. Un étudiant est représenté par son : N, Nom, Prénom et sa Moyenne.

Q1) proposer une structure de donnée chainée qui permet de stocker la liste des étudiants. (La structure + la
déclaration d’une liste vide).

Q2) écrire une fonction qui permet de calculer la moyenne générale d’une classe Li.

Q3) écrire un programme qui permet d’éclater une liste Li en 2 sous listes L1 et L2, de telle sorte la première liste
L1 contient seulement les étudiants Admis, et la deuxième L2 contient les étudiants Ajournés

Exercice2 (Devoir à domicile : Considérer comme Micro interrogation N1) ! la dernière semaine avant les vacances

On considère 2 listes L1 et L2 ordonnées dont les éléments sont des entiers (N).

On veut créer une liste L (ordonnée) à partir des deux listes L1 et L2.

Q1) Proposer une structure de donnée chainée qui permet de stocker la liste des numéros. (La structure + la
déclaration d’une liste vide).

Q2) Supposons que L1 et L2 existent déjà. écrire les instructions (en langage C) qui permettent de créer la liste final
L.

Ex : L1= [1, 5, 13, 14]

L2 = [0, 2, 3, 8, 20]

! L = [0, 1, 2, 3, 5, 8, 13, 14, 20]

M. bada 1

TD3 : les listes, les piles et les files Université de Batna 2 Algorithmique et structures de données


Les piles et les files

Dans les exercices avec piles et files il est suffit de faire appel aux sous algorithmes de base définis dans le cours.

Pile_vide (P1) =1 si la pile vide, 0 si la pile contient au moins un élément.


X= POP (P1) : Retourne le dernier élément de la Pile « Sommet » (l’élément sera supprimé de la Pile).
Push (P1, X) : insérer l’élément X dans la pile P1.

File_vide (F1) =1 si la file vide, 0 si la File contient au moins un élément.


X= Defiler (F1) : Retourne le 1er élément de la file (l’élément sera supprimé de la file).
Enfiler (F1, X) : insérer l’élément X dans la file F1. (X sera placé à la fin de la file)

Exercice 3 (les files) :

Ecrire une fonction afficher (F1) qui affiche tous les éléments d’une file.

Ecrire une autre fonction défilerJusqua (F1, Elt) qui défile la file jusqu'à l'élément Elt.

Attention : Si l'élément Elt existe ! Elt ne sera pas défilé (il reste dans la file).
Si l'élément n'appartient pas à la file, alors la fonction défile toute la file.

Exercice 4 (les piles + les files) :

Ecrire une procédure qui inverse une pile P1 de réels. Doit-on utiliser une pile ou une file ?

M. bada 2

TD3 : les listes, les piles et les files Université de Batna 2 Algorithmique et structures de données


Corr

Exo1 :

Q1 : proposition d’une structure chainée

struct etudiant {
int N;
char nom[255];
char prenom [255] ;
float moyenne ;
etudiant* suivant=NULL;
};

etudiant* Liste ;

Q2)calculer la moyenne générale d’une classe

double CalculeMoyenneGenerale (etudiant* tete){


float moyenneGenerale;
float somme=0;
int nbrEtudiant=0;
etudiant* position;
position = tete;

while (position != NULL){

somme= somme+ (*position).moyenne;


nbrEtudiant ++;
position = (*position).suivant;
}

if (nbrEtudiant >0){
moyenneGenerale= somme / nbrEtudiant;

return moyenneGenerale;
}

M. bada 3

TD3 : les listes, les piles et les files Université de Batna 2 Algorithmique et structures de données

Q3) éclatement de la liste

etudiant* L1=NULL;
etudiant* L2=NULL;
etudiant* ElementAInserer;

etudiant* position;
position= L;

while (position != NULL){

//allouer un espace memoire pour le nouvel element


ElementAInserer = (etudiant*) malloc (sizeof (etudiant) );

if ( (*position).moyenne >= 10 ){
//copier les différents champs dans le nouvel element

(*ElementAInserer).N = (*position).N;
strcpy ((*ElementAInserer).nom, (*position).nom);
strcpy ((*ElementAInserer).prenom, (*position).prenom);
(*ElementAInserer).moyenne = (*position).moyenne;

// inserer le nouvele element dans la tete de L1


(*ElementAInserer).suivant = L1;
L1 = ElementAInserer;

}else {
//copier les différents champs dans le nouvel element

(*ElementAInserer).N = (*position).N;
strcpy ((*ElementAInserer).nom, (*position).nom);
strcpy ((*ElementAInserer).prenom, (*position).prenom);
(*ElementAInserer).moyenne = (*position).moyenne;

// inserer le nouvele element dans la tete de L2

(*ElementAInserer).suivant = L2;
L2 = ElementAInserer;

position= (*position).suivant;

M. bada 4

TD3 : les listes, les piles et les files Université de Batna 2 Algorithmique et structures de données

Exo3 les files :

Q1)
Void afficher (File F1)
{
int nbr ;
while ( File_vide (F1) != 1 ) {
nbr = Defiler (F1) ;
Printf (‘’%d’’,nbr) ;

Q2)

Void afficherjusqua (File F1 , int elt)


{
int nbr ;
int trouvé = 0 ;
while ( ( trouvé ==0 )&&( File_vide (F1) != 1 ) ) {
nbr = Defiler (F1) ;
If (nbr == elt){
Trouvé = 1 ;
Enfiler (F1, nbr) ; // ou Enfiler (F1, elt) ;

exo4 : (inverser une pile en utilisant une file ) :


Pour inverser une pile on aurait besoin d’utiliser une file où l’on enfile ce qui a été dépilé puis empilant à partir de la
file les éléments seront installés dans l’ordre inverse

M. bada 5

TD3 : les listes, les piles et les files Université de Batna 2 Algorithmique et structures de données

inverser ( Pile P1) {


Double Y ;
File F ;
Init_file (F) ;

While ( Pile_vide (P1) != 1 ) {

Y = Depiler (P1) ;
Enfiler (F,Y) ;

Init_Pile (P1);

While ( File_vide (F)!= 1 ) {

Y = Defiler (F) ;
Empiler (P1, Y)

M. bada 6