Vous êtes sur la page 1sur 4

TP algorithmes, structures de données et complexité

1. Implémenter un arbre bicolore

2. Implémenter un tas

3. Implémenter un arbre quelconque dont les éléments sont des entiers avec les
opérations suivantes : créer_arbre (qui crée un arbre (donc la racine) avec un
entier), ajout_fils (qui ajoute un fils à un nœud donné), supprimer_fils (qui
supprime le dernier fils d’un nœud donné), rechercher_valeur (qui étant donnée
une valeur v, retourne un nœud dont la clé est égale à v).

4. Ecrire un programme qui teste si un arbre dans lequel tout nœud est rouge ou
noir est un arbre bicolore.

5. Ecrire un programme récursif qui calcule la hauteur d’un arbre binaire

6. Ecrire un programme qui teste qu’un arbre est un arbre binaire de recherche

7. Ecrire un programme qui évalue une expression arithmétique parenthésée


donnée sous forme de chaîne de caractères. L’expression peut contenir les
opérateurs + (addition), - (soustraction), * (multiplication), / (division), puissance
(élévation à la puissance), racine (racine carrée), log (logarithme népérien).

8. Ecrire un programme qui donne le plus long chemin d’un graphe non orienté
sans cycle. Le graphe est représenté comme une matrice d’adjacence.

9. Ecrire un programme qui convertit un tas (max-heap) en un arbre binaire de


recherche équilibré (quel que soit le nœud considéré, la différence de hauteur
entre le sous-arbre gauche et le sous-arbre droit n’excède pas 1)

10. Ecrire un programme qui convertit un tas (min-heap) en un arbre binaire de


recherche équilibré

11. On considère un ensemble d’ouvriers et un ensemble de travaux à effectuer.


Un ouvrier peut les compétences nécessaires pour effectuer plusieurs travaux
différents et pour un travail considéré, plusieurs ouvriers peuvent être à même
de l’effectuer. Ecrire un programme qui donne une affectation des travaux aux
ouvriers en minimisant le nombre de sans-emploi.

12. Ecrire un programme qui convertit un arbre binaire de recherche en un tas (max-
heap)

13. Ecrire un programme non récursif qui affiche les clés de tous les nœuds d’un
arbre binaire

14. Ecrire un programme qui convertit un arbre binaire de recherche en un tas (min-
heap)
15. Implémenter une file de priorité maximale sans utiliser de tas en considérant
que les priorités sont des entiers compris entre 1 et k.

16. Implémenter une file de priorité maximale sans utiliser de tas en considérant
que les priorités sont des réels compris entre 1 et k

17. Ecrire un programme qui donne le plus long chemin d’un graphe non orienté
sans cycle. Le graphe est représenté comme une liste d’adjacence.

18. Implémenter une file de priorité minimale sans utiliser de tas en considérant que
les priorités sont des entiers compris entre 1 et k.

19. Implémenter une file de priorité minimale sans utiliser de tas en considérant que
les priorités sont des réels compris entre 1 et k.

20. Implémenter deux piles dans une liste simplement chaînée

21. Ecrire un programme qui donne tous les chemins indépendants (deux chemins
sont indépendants s’ils ne passe pas par une même arête) partant d’un point A
à un point B d’un graphe non orienté. Le graphe est représenté comme une liste
d’adjacence.

22. Implémenter une file de priorité maximale avec un tas (max heap)

23. Implémenter une file de priorité minimale avec un tas (min heap)

24. Ecrire un programme qui étant donné une chaîne de caractère ch, affiche tous
les anagrammes de même longueur que ch

25. Implémenter deux files dans une liste simplement chaînée

26. Ecrire un programme non récursif qui affiche les clés de tous les nœuds d’un
arbre binaire sans utiliser une autre structure de données particulière et sans
modifier l’arbre.

27. Implémenter un tas en utilisant une liste doublement chaînée

28. Implémenter un tas en utilisant une liste simplement chaînée

29. Ecrire un programme qui donne tous les chemins partant d’un point A à un point
B d’un graphe non orienté

30. Ecrire un programme qui donne tous les chemins indépendants (deux chemins
sont indépendants s’ils ne passe pas par une même arête) partant d’un point A
à un point B d’un graphe non orienté. Le graphe est représenté comme une
matrice d’adjacence.

31. Implémenter un arbre binaire de recherche équilibré


32. On dispose d’une pile P1 de livres qu’on veut transférer en une autre pile P2 de
telle sorte que dans cette dernière les livres soient toujours classés par ordre
alphabétique des titres. Pour faire ce transfert on dispose d’une pile
intermédiaire dans laquelle l’ordre n’a pas d’importance. Ecrire le programme
permettant de faire le transfert.

33. Ecrire un programme non récursif de parcours en profondeur d’un arbre

34. Un dictionnaire est une liste ordonnée de mots, chacun étant associé à une
définition. On se propose de représenter cela par une association de tableaux
et liste chainées de la manière suivante : chaque entrée du tableau contient un
code et la liste ordonnée des mots (et définitions) correspondant à ce code. Le
code d’un mot est obtenu à partir de la somme des codes de ses lettres. On
suppose que le tableau est de taille 200. Implémenter cette structure de
données avec les opérations : créer_dico, insérer_mot, supprimer_mot,
modifier_mot, rechercher_mot.

35. Implémenter deux files dans une liste simplement chaînée

Indications : Une file de priorité est une structure de données à gestion FIFO en tenant
compte de la priorité des éléments pour l’opération « défiler » (DEQUEUE). Il en existe
de deux sortes : les files de priorité maximale et les files de priorité minimale.
Concrètement, chaque élément d’une file de priorité est munie d’une priorité qui est un
nombre. Si on est dans une file de priorité maximale (respect. minimale), un élément
e1 de priorité p1 est plus prioritaire qu’un élément e2 de priorité e2 si p1 > p2 (respect.
p1 < p2). L’objectif des files de priorité est de défiler l’élément le plus prioritaire qui est
le plus ancien dans la file : si on considère une file de priorité F vide. Le tableau suivant
donne en première colonne des opérations exécutées sur F et en deuxième colonne
les résultats de l’exécution de ces opérations, selon que F est une file de priorité
maximale ou minimale.

Opérations Résultats des opérations

Priorité maximale Priorité minimale

Eléments de F Elément Eléments de F Elément


retourné retourné

enfiler (F, (e1,7) (e1,7)


e1, 7)

enfiler (F, (e1, 7), (e2, 9) (e1, 7), (e2, 9)


e2, 9)

enfiler (F, (e1, 7) ,(e2, 9), (e3, 2) (e1, 7) ,(e2, 9), (e3, 2)
e3, 2)
enfiler (F, (e1, 7), (e2, 9), (e3, 2), (e4, (e1, 7), (e2, 9), (e3, 2), (e4,
e4, 7) 7) 7)

enfiler (F, (e1, 7), (e2, 9), (e3, 2), (e4, (e1, 7), (e2, 9), (e3, 2), (e4,
e5, 4) 7), (e5, 4) 7), (e5, 4)

défiler(F) (e1, 7), (e3, 2), (e4, 7), (e2, 9) (e1, 7), (e2, 9), (e4, 7), (e3, 2)
(e5, 4) (e5, 4)

défiler(F) (e3, 2), (e4, 7), (e5, 4) (e1, 7) (e2, 9), (e4, 7), (e5, 4) (e1, 7)

enfiler(F, (e3, 2), (e4, 7), (e5, 4), (e6, (e2, 9), (e4, 7), (e5, 4), (e6,
e6, 8) 8) 8)

défiler(F) (e3, 2), (e4, 7), (e5, 4) (e6, 8) (e2, 9), (e4, 7), (e6, 8) (e5, 4)

enfiler(F, (e3, 2), (e4, 7), (e5, 4), (e7, (e2, 9), (e4, 7), (e6, 8), (e7,
e7, 5) 5) 5)

défiler(F) (e3, 2), (e5, 4), (e7, 5) (e4, 7) (e2, 9), (e4, 7), (e6, 8) (e7, 5)