Académique Documents
Professionnel Documents
Culture Documents
InAt1R
apfAtuécs et de de AIM)AITUNIOUB a STRUCI'URBS
DB DONNÉES Section : ml
Enseignantes : A.
TDI
(RÉCURSIVITÉ)
Exe i 1
Ecrire une procédure récursive permettant d'inverser les éléments d'un tableau T de N
caractères.L'inversion doit êÙe effectuéede sorte à avoir le caractèrede la premièrecase
dans la demière et inversement.
Exemple
:
Tableau avant l'appel de la procédure :
Exercice
Exercice 3
Pour convertir un nombre entier positif N de la base décimale à la base binaire, il faut opérer
par des divisions successives du nombre N par 2. Les restes des divisions constituent la
représentation binaire. Exemple binaire(13)=1101.
Ecrire une procedure récursive « Binaire » permettant d'aficher la représentaüon binaire d'un
nombre N.
Exercice 4
a. Ecrire une fonction récursive permettant de vérifier qu'un tableau T est Ù•iéou non
b. Ecrire une procédure permettant d'insérer un entier E dans un tableau T.
2023/2024
Excrciçç 4
La suite de Fibonacci est définie par fo —fi I et pour tout naturel n >2 par :
fn fn—l+ fn—2
1. Écrire une fonction récursivef(n) calculant le terme d'indice "n" de cette suite.
2. Combien d'appels à la fonction 'T' sont-ils faits pour calculerf (5) ?
3. Écrire une version récursive du calcul de f (n) ne nécessitant qu'au plus "n" appels à
elle-même pour calculerf (n) (pour n >2).
Exercice 5
3. Ecrire un algorithme Intersection(Tl, T2) qui nous renvoie l'intersection des deux
tableaux qui lui sont passés en argument. Etudiez les cas où le tableau est trié ou non.
Exercice 6
Soit une image binaire représentée dans une matrice à 2 dimensions. Les éléments m[iJ] sont
dits pixels et sont égaux soit à Osoit à l. Chaque groupement de pixels égaux à I et connectés
entre eux forment une composante connexe (figure). L'objectif est de donner une valeur
différente de I à chaque composante (2 puis 3 puis 4 etc.).
l. Ecrire une fonction récursive propager permettant de partir d'un point (iJ) situé à
l'intérieur d'une composante connexe et de propager une éüquette T à tous les pixels
situés à l'intérieur de la composante.
2. Ecrire une fonction étiqueter permettant d'affecter une étiquette différente à chaque
composante connexe.
2023/2024
Exçrciçç 7
Il y a n oranges dans la cuisine et vous avez décidé de manger quelques-unesde ces oranges
tous les jours comme suit :
• Mangez une orange.
• Si le nombre d'oranges restantes n est divisible par 2 alors vous pouvez manger n/2
oranges.
• Si le nombre d'oranges restantes n est divisible par 3 alors vous pouvez manger
2*(n/3) oranges.
Ecrire une fonction de type diviser pour régner qui permet de calculer la somme des
éléments d'un tableau.
Exercice 9
Etant donné un tableau trié d'entiers A[s..n et deux entiers a et b tel que a<= b. on cherche s'il
existe un élément du tableau vérifiant (s'il y en a plusieurstrouvez un). Si la
valeur n'existe pas la fonction retourne -l.
Donner une fonction de type diviser pour régner qui résout ce problème.
2023/2024 3/3
Jon 0 · c89.
N
3K3
00
7
z0 -L—O
TD
ー
D -
( D
いンめ
、
い ソ良)
島良 =ら。
C。 も
と(心人
い)
④
0
い) ユい )
(a)
00
。
0
ㄒ
4
x Z
3) ' 00
3
de de ALGORITHMIQUE
& STRUCTURES
DE DONNÉES Section ; FIAI
FAseimantcs : A.
TD2
(USTO CHAINÉES)
Exercice 2
On dispose d'un tableau de listes linéaires chaînées. Chaque case du tableau contient un entier
qui représente une longueur de chaine et un pointeur vers la liste des mots de même longueurs
à raison d'un mot par maillon.
2023/2024 1/3
Al•nrnhm•
6
Ex ce
Les creuses sont des matrices d'entiers comprenant une majorité de O comme dans
l'exemple suivant :
o 2 o o o
1 3 o o
M-
o O o o o
o o O 6
Par souci d'économie, une matrice creuse peut être représentée par une liste chainée simple
contenant uniquement les éléments non nuls avec leurs indices. Ainsi, la maù-ice M peut être
représentée par la liste suivante : M = [(2, (1,2)) ; (l, (2,1)) ; (3, (2,3)) ; (6, (4,4))].
Les éléments sont rangés par indice croissant (ligne puis colonne). Polir connaître la
dimension de la matrice nous allons définir le Wpe MatriceCreuse comme suit :
2023/2024 2/3
4. Ecrire une procédure Somme_Matrice_Creuse (Ml,M2: MatriceCreuse, Var M3:
MatriccCrcusc) qui permet de construirc unc matricc qui est la somme de deux
matrices creuses de même dimension. La somme de deux matrices Tl et T2 se fait par
la formule suivante :
5. Ecrire une procédure Ins_Ligne (Lig: TablD, C: entier, Var M: MatriceCreuse) qui
permet d'insérer une ligne dans une matrice creuse. Avec Lig un tableau à une
dimension de taille C.
6. Ecrirc une procédurc Affiche_Diag_Matrice (M: MatriceCreuse) qui permet d'affcher
les éléments non nuls de la diagonale d'une matrice creuse. Il faut vérifier si la matrice
est carrée ou non.
Exercice 4
Définition : une liste circulaire est une liste doublement chainée dont le nœud de la tête pointe
le dernier nœud et vis-versa.
Déclarations :
Nœud —Enregistrement
Val : Entier
suiv : î Nœud //Nœud suivant
prec : T Nœud //Nœud
précédent
FinEnreg
LC = Nœud //Liste circulaire
1. Ecrire une procédure Ajout_Queue_LCpermettant d'ajouter un entier E en queue
d'une liste circulaire L.
2. Ecrire une fonction Appartient LC permettant de chercher si une valeur E est présente
dans une liste circulaire L. En cas de présence de E, la fonction doit retourner l'adresse
du premier nœud le contenant, sinon, elle retournera Nil.
3. Ecrire une procédure Supprimer_val_LCpermettant de supprimer d'une liste circulaire
la première occurrence d'une valeur E.
4. Ecrire une procédure Vider LC permettant de libérer l'espace mémoire d'une liste
2023/2024 3/3
circulaire L.
0089 't
ΒααΔΙΙ 'ι
ΫΙ)ΙΥ
ΜΤΙλ
03 0 0
0 023
Ç.Jû,uoe
-
enşü
C QB.İ-A
3Jo.rvf(
•JOAYv
q 'JQ.L
S %101
k) Rahu.-
şw&q
。~ い丁。印H)
, S澱祕
0 0 ハ0 人0 0
0 0〇9 0 00 0 0
00 イ 0つ イ「0 0
0「
)
じ 30 の イ ら 新
9 こ
20
2
supérieur des sciences
et de teckmoloòede AUBORITUMIOUE & STRUCI'URES
DE DONNÉES Section : AAI
t Fanseignantcs: A. Naceur
N. Khiari
(PILES rr FILES)
Exerçice 1
Un problème fréquent d'un compilateuret des traitementsde textes est de déterminer si les
parenthèses d'une chaîne de caractères sont balancées et proprement incluses l'une dans l'une
Par exemple, la chaîne ((() ) ( ) ) ( ) est bien balancée et proprement écrite. Mais les chaînes )
( )( ou ( ) ) ne le sont pas.
Écrire un algorithme qui retourne Vrai si une chaîne de caractères est proprement écrite et
bien balancée, et Faux sinon. Utiliser pour cela une pile.
Exercice 2
Les notations préfixée (ou préfixe) et post-fixée (ou post-fixe) sont des formes d'écriture
d'expressions arithmétiques de façon non ambiguë sans utiliser les parenthèses. Ces notations
se distinguentpar la position relative que prennent les opérateurs et leurs opérandes. Un
opérateur est écrit avant ses opérandes en notation préfixée et après ses opérandes en notation
post-fixée.
Exemple : l'expression en notation infixée classique : (5 - 6) * 7 est écrite :
• En notation préfixée : * - 5 6 7
• En notation post-fixée : 5 6 - 7 *
Écrire un algorithme qui transforrneune expressioninfixée avec des parenthèsesen notation
postfixée.
Exemple : 3 * (((12 - 3) / 3) - l) doit-être convertie en : 3 12 3 —3 / I - *
L'algorithme doit ranger le résultat de la conversion dans une file avant de l'afficher. La file
doit contenir la liste des opérandes et des opérateurs séparés par un espace.
Exercice 3
On suppose que l'on a deux files d'entiers triées dans l'ordre croissant FI et F2. On a en plus
une troisième file F3 vide. On voudrait remplir F3 avec les entiers présents dans les deux
premières en faisant en sorte que F3 soit aussi triée dans l'ordre croissant. F3 est le résultat de
la fusion de FI avec F2.
Fik fl d'entiers
4 6 12 23 25
tète
naagazn
queue
1
Il faut que la fusion fonctionne avec toutes les files FI et F2 possibles et imaginables. Comme
d'habitude dans la manipulationdes files, on n'utilise que les primitives de manipulation
(ajouter en queue « Enfiler », retirer en tête « Défiler », lire « Tète », .. Ecrire la procédure
correspondante à cette fusion.
Exercice 4
On suppose que l'on a une file F. On veut
trouver une fonction récursive pour inverser
F. Le principe est le suivant : pour inverser F, Itfk
on suppose que l'on peut inverser la file au nu
commençant au deuxième élément. Il faut
alors posidonner l'élément de tête de file en
queue de file.
Exemple : Pour inverser F, on met 2 en
mémoire, et on inverse la file restante. Il
reste alors à ajouter 2 en queue de la file
restante inversée pour obtenir F inversée.
Ecrire ceüe fonction récursive (la fonction
doit fonctionner pour toutes les files
et vous ne devez utiliser que les
primiüves classiques sans manipuler les
pointeurs directement).
Exercice 5
Ecrire une procédure pemeüant de renverser chaque k éléments d'une file. Vous pouvez
utiliser au choix les primitives du type abstrait Pile et File.
1 2 3 4 5 6 7 8 9 10
Si k= 3, la file F devient :
3 2 1 6 5 4 9 8 7 10
Si k= 4, la file F devient :
4 3 2 1 8 7 6 5 .10 9
2
Une Deque (double endcd queue ou unc filc
à deux bouts) possèdc à la fois les propriétés
d'une pile et d'une file. Unc Dequc est
définie par deux extrémités : tête ct qucuc.
On peut donc consulter, ajouter ou supprimer
un élément à chaquc extrémité dc la
su-ucture.
9n considèrc unc Dcquc commc une listc
chainée de caractères,
1. Ecrire les structures de données nécessaires pour définir une Deque.
2. Définir le modèle de Deque qui contient l'ensemble des opérations permettant de la manipuler
sens est un paramètre défini pour désigner l'exfrémité à utiliser. Il sera égal à
• (+1) si lecture/ajout/suppressionsc font en tête
(-1) si lecture/ajout/suppression se font en queue.
3. Ecrire les opérations suivantes (en utilisant le modèle de Deque):
• Enfiler et défiler dans le cas où la Deque est une file FIFO.
Empiler et dépiler dans le cas où la Deque est une pile LIFO.
4. Ecrire unc fonction récursive qui permet de vérifier si le mot contenu dans une Deque est un
palindrome (en utilisant le modèle de Deque). Rappeler qu'un palindromc est un mot qui se lit
de la même manièrede gauche.àdroiteet de droiteà gauchecomme « radar », « été », «
ressasser », « selles »...