Vous êtes sur la page 1sur 5

Département d’Informatique

Module I133 : Structures de Données en Langage C


Année Universitaire 2022/2023
Parcours MIP (2ème année)
Pr : B.HSSINA/F.KHOUKHI

TD No 1
(Listes Simplement Chaı̂nées)
L’objectif est de créer un programme C permettant la gestion d’une bibliothèque. Cette bi-
bliothèque contient un grand nombre de livres de différentes spécialités. Chaque livre (structure)
est caractérisé par les informations suivantes code, titre, spécialité, auteur et édition.
Nous souhaitons gérer cette bibliothèque à l’aide d’une liste simplement chaı̂née en utilisant les
déclarations suivantes :
1 typedef struct {
2 int mois ;
3 int annee ;
4 } Edition ;
5
6 typedef struct {
7 int code ;
8 char titre [30];
9 char specialite [30];
10 char auteur [30];
11 Edition edit ;
12 } Livre ;
13
14 typedef struct element {
15 Livre Liv ;
16 struct element * suivant ;
17 } Liste ;
Les fonctions à rédiger sont les suivantes :
1. Livre Lire livre() et Liste * AllouerNoeud().
2. Liste * inserer debut(Liste * L, Livre nv).
3. Liste * inserer fin(Liste * L, Livre nv).
4. void afficher liste(Liste * L) qui affiche la liste, en commençant par afficher le premier
élément de la liste jusqu’au dernier.
5. Liste * supprimer(Liste * L, char * nom auteur) qui supprime les livres d’un auteur
passé en paramètre.
6. int comparer edit(Edition X, Edition Y) qui retourne :
• -1 : si X avant Y
• 0 : si X et Y sont identiques
• 1 : si X après Y
7. Liste * tri liste(Liste * L) qui retourne une liste contenant les livres classés dans
l’ordre croissant selon la date d’édition.
NB : utiliser la fonction comparer edit
8. void diviser(Liste * L, Liste ** L1, Liste ** L2), créer deux sous-ensembles de livres(deux
listes), selon la spécialité (mathématique dans L1 et physique dans L2).
9. Donner un programme principal (main) pour tester les différentes fonctions.

1/5
Département d’Informatique
Module I133 : Structures de Données en Langage C
Année Universitaire 2022/2023
Parcours MIP (2ème année)
Pr : B.HSSINA/F.KHOUKHI

TD No 2
(Listes Doublement Chaı̂nées)
On se propose la manipulation des polynômes à une variable par une liste chainée constituée
des monômes de ces polynômes. On représente un polynôme par une liste doublement chainée,
chaque noeud de la liste correspond à un monôme.

Un monôme est représenté par les informations suivantes :


• Le coefficient.
• L’exposant.
Chaque maillon(Element) de la liste représente un monôme, avec son coefficient(de type réel) et
son exposant(de type entier). On ne range en mémoire que les monômes de coefficient différent
de zéro.

Par exemple, la figure ci-dessous montre la représentation de la liste doublement chaı̂née


correspondant au polynôme : P (x) = 15x6 + 7x4 + 5x2 + 3 .

Déclaration des structures :

1 typedef struct {
2 float coef
3 int exp ;
4 } Monome ;
5
6
7 typedef struct element {
8 Monome M ;
9 struct element * suivant ;
10 struct element * precedent ;
11 } Poly ;
Les fonctions à rédiger sont les suivantes :
1. Ecrire une fonction qui permet de créer et de retourner un monôme dont le coefficient
et l’exposant sont lus au clavier.
Monome lire monome()
2. Ecrire une fonction qui permet d’allouer de l’espace mémoire pour un nouveau nœud.
La fonction retourne l’adresse de ce nouveau nœud en cas de succès et NULL en cas
d’´echec.
Poly * AllouerNoeud()

2/5
3. Ecrire une fonction qui permet de supprimer les monômes dont le coefficient est nul,
si de tels monômes existent.
Poly * supprimer monome nul (Poly * P)
4. Ecrire une fonction qui permet d’insérer un monôme à la position appropriée dans la
liste (les élément doivent être rangés par ordre décroissant de l’exposant), en traite
tous les cas possibles.
Poly * ajouter monome(Poly * P, Monome nv)
5. Ecrire une fonction qui permet d’évaluer un polynôme pour une valeur réelle x.
NB : utiliser la fonction pow de la bibliothèque math.h.
Par exemple pour x = 1 on a P (1) = 30
float evaluer(Poly * P, float x)
6. Ecrire une fonction qui permet d’afficher un polynôme.
void affichage polynome(Poly * P)
7. Ecrire une fonction qui permet de calculer la dérivée d’un polynôme.
Poly * derive polynome (Poly * P)
8. Ecrire une fonction qui permet de détruire un polynôme.
Poly * detruire polynome (Poly * P)
9. Donner un programme principal (main) qui présente un menu de choix.

3/5
Département d’Informatique
Module I133 : Structures de Données en Langage C
Année Universitaire 2022/2023
Parcours MIP (2ème année)
Pr : B.HSSINA/F.KHOUKHI

TD No 3
(Piles : Implémentation statique)
L’implémentation statique des piles utilise les tableaux. Dans ce cas, la capacité de la pile
est limitée par la taille du tableau. L’ajout à la pile se fait en incrémentant l’indice, tandis que
le retrait se fait en le décrémentant.

La structure de donnée permettant de gérer une telle pile est donné par :
1 # include < stdio .h >
2 # define MAX 10
3 typedef struct TPile {
4 char Elts [ MAX ];
5 int NbElts ;
6 } TPile ;

1. Une implémentation de l’ensemble des fonctions de manipulation d’une pile est obligatoire :
• La fonction void initialiser(TPile *pile) qui initialise la pile.
• La fonction int pilevide(TPile pile) qui teste si la pile est vide
• La fonction int pilepleine(TPile pile) qui teste si la pile est pleine.
• La fonction void empiler(TPile *pile, char obj) qui empile un élément dans la pile.
• La fonction void depiler(TPile *pile, char *obj) qui dépile une valeur de la pile.
• La fonction void afficher(TPile pile) qui affiche le contenu de la pile.
Un palindrome est une chaine de caractères qui se lit de la même manière de gauche à
droite et de droite à gauche.
Exemple : Le prénom AYA est palindrome, mais le prénom MOHAMED n’est pas pa-
lindrome.

2. En utilisant une pile avec une implémentation statique, écrire une fonction qui permet de
vérifier si une chaine de caractère (un mot) est palindrome.
3. Donner un programme principal (main) pour tester les différentes fonctions.

4/5
Département d’Informatique
Module I133 : Structures de Données en Langage C
Année Universitaire 2022/2023
Parcours MIP (2ème année)
Pr : B.HSSINA/F.KHOUKHI

TD No 4
(Files : Implémentation statique)
L’implémentation statique d’une file peut être réalisée par décalage en utilisant un tableau
avec une tête fixe, toujours à 0, et une queue variable. Elle peut être aussi réalisée par un tableau
circulaire où la tête et la queue sont toutes les deux variables.

On souhaite implémenter une file à l’aide d’un tableau circulaire, en utilisant la structure
définie ci-après :
1 # include < stdio .h >
2 # define MAX 10
3 typedef struct TFile {
4 int Elts [ MAX ];
5 int id ;
6 int NbElts ;
7 } TFile ;

1. Ecrire les fonctions suivantes :


• La fonction void initialiser(TFile *file) qui initialise la file.
• La fonction int filevide(TFile file) qui teste si la file est vide
• La fonction int filepleine(TFile file) qui teste si la file est pleine.
• La fonction void enfiler(TFile *file, int obj) qui enfile un élément dans la file.
• La fonction void defiler(TFile *file, int *obj) qui défile une valeur de la file.
• La fonction void afficher(TFile file) qui affiche le contenu de la file.
On se donne une file d’entiers que l’on voudrait trier avec le plus grand élément en fin de
la file. On n’est autorisé à utiliser que les fonctions implémentées ci-avant :
2. Donner un algorithme de tri qui utilise seulement les opérations ci-dessus et 2 files. La file
F1 contiendra les entiers à trier, file F2 contiendra les entiers triés après exécution.
Le prototype de la fonction : void trier(TFile *F1,TFile *F2)
3. Donner un programme principal (main) qui présente un menu de choix.

5/5

Vous aimerez peut-être aussi