Académique Documents
Professionnel Documents
Culture Documents
I Term
CHAPITRE 3–Structures de données
1 Table des matières
2 Introduction 2
3 L’essentiel 2
3.1 Mes notes 2
4 Rappel types structurés 4
4.1 Exercices maison Canvas 4
5 Type abstrait 4
5.1 Définition 4
5.2 L’interface 4
5.3 Le cas python 4
6 Les listes chaînées 5
6.1 Interface 5
6.2 Implémentation par des tuples 5
6.2.1 Exercices 6
6.3 Implémentation par un tableau 7
6.3.1 Définition 7
6.3.2 Exercices 8
7 Les piles 10
7.1 Présentation 10
7.2 Opérations courantes de l’interface 10
7.3 Implémentation par une liste 10
7.4 Implémentation par un tableau 10
7.4.1 Exercices 10
8 Les files 14
8.1 Présentation 14
8.2 Opération élémentaires avec implémentation tableau 14
8.3 Exercices 15
La résolution de problème par des programmes informatiques nécessite de biendéfinir les données manipulées par
ces programmes. Pour cela, on utilise destypes abstraits de données adaptés au problème.
En informatique, un type abstrait (en anglais, abstract data type ou ADT) est une manière de décrire de façon précise
(spécifier)un ensemble de données et l'ensemble des opérations qu'on peut effectuer sur elles. On qualifie
d'abstrait ce type de données car il correspond à un cahier des charges qu'une structure de données doit ensuite
mettre en œuvre.
Ce chapitre présente trois types abstraits classiques :les listes, les piles et les files, et montre plusieurs
implémentationsde chacun d'eux.
3 L’essentiel
3.1 Mes notes
……………………………………………………………………………………………………………………………………………………………………………………
……………………………………………………………………………………………………………………………………………………………………………………
……………………………………………………………………………………………………………………………………………………………………………………
……………………………………………………………………………………………………………………………………………………………………………………
……………………………………………………………………………………………………………………………………………………………………………………
……………………………………………………………………………………………………………………………………………………………………………………
……………………………………………………………………………………………………………………………………………………………………………………
……………………………………………………………………………………………………………………………………………………………………………………
……………………………………………………………………………………………………………………………………………………………………………………
……………………………………………………………………………………………………………………………………………………………………………………
……………………………………………………………………………………………………………………………………………………………………………………
……………………………………………………………………………………………………………………………………………………………………………………
……………………………………………………………………………………………………………………………………………………………………………………
……………………………………………………………………………………………………………………………………………………………………………………
……………………………………………………………………………………………………………………………………………………………………………………
……………………………………………………………………………………………………………………………………………………………………………………
……………………………………………………………………………………………………………………………………………………………………………………
……………………………………………………………………………………………………………………………………………………………………………………
……………………………………………………………………………………………………………………………………………………………………………………
……………………………………………………………………………………………………………………………………………………………………………………
……………………………………………………………………………………………………………………………………………………………………………………
……………………………………………………………………………………………………………………………………………………………………………………
Répondre à un QCM " Pré-requis structure des données" sur les pré-requis de ce chapitre. Attention il
est primordial de bien regarder la correction et de compléter « mon essentiel ».
Regarder une vidéo sur les structures de données.Attention il est également primordial de prendre des
notes et de compléter « mon essentiel ».
Effectuer le TP notebooksur l’écriture de 3 fonctions (elles doivent être spécifiées et testées). Ce TP est
un avant-goût de l’épreuve pratique.
5 Type abstrait
5.1 Définition
Le langage Python dispose, comme tous les langages, d'un ensemble de types de base et de types structurés vus
dans le programme de Première : nombres, chaînes de caractères, tuples, tableaux, dictionnaires. Ces types sont des
briques de base qui permettent de créer des structures de données plus complexes.
Pour définir ces structures de données, on utilise des types abstraits de données. Un type abstrait spécifie :
• Le type de données contenues
• Une description détaillée des opérations qui peuvent être effectuées sur les données
5.2 L’interface
Une structure de données possède un ensemble de routine (procédures ou fonctions) permettant d’ajouter,
d’effacer, d’accéder aux données. Cet ensemble de routines est appelé interface. Les 4 routines élémentaires de
l’interface (CRUD) que constituent les routines sont :
Les tableaux : les éléments y sont ordonnés et classé par des numéros de 0 à la taille du tableau - 1
Les listes : les éléments y sont rangés dans un certain ordre mais l’on a accès qu’à certains éléments. Pour
récupérer les autres il faut enlever les éléments précédents ou suivants.
Python fait donc le choix d’interprétation de fusionner ces deux notions algorithmiques ce qui les rend plus faciles à
manipuler mais qui est l’arbre qui cache la forêt.
Dans ce chapitre nous nous concentrerons sur la notion algorithmique de liste chainée (liste algorithmique) et les
deux sous-notions qui en découlent : celle de pile et celle de file.
Le langage de programmation Lisp (inventé par John McCarthy en 1958) a été un des premiers langages de
programmation à introduire cette notion de liste (Lisp signifie "listprocessing").
6.1 Interface
Voici les opérations de l’interface qui peuvent être effectuées sur une liste
Dans cette structure on peut modifier la liste chainée en enlevant le premier élément et en récupérant la fin de la
liste. Nous avons donc accès seulement au premier élément et pas directement aux suivants
……………………………………………………………………………………
ma_liste = creer_liste()
……………………………………………………………………………………
liste_vide(ma_liste)
liste_2 = inserer(ma_liste,12) ……………………………………………………………………………………
liste_2 = inserer(liste_2,15) ……………………………………………………………………………………
liste_2 = inserer(liste_2,11) ……………………………………………………………………………………
dernier = tete(liste_2)
liste_avant = queue(liste_2) ……………………………………………………………………………………
……………………………………………………………………………………
………………………………
……………………………………………………………………………………………………………………………………………………………….
…………………………………………………………………………………………………………………………………………………………………………………….
…………………………………………………………………………………………………………………………………………………………………………………….
…………………………………………………………………………………………………………………………………………………………………………………….
……………………
6.2.1 Exercices
Exercice N°1
Quel pré-condition(assert) devrait-on ajouter à tete(liste) et queue(liste) ?
……………………………………………………………………………………………………………………………………………………………….……………………
Exercice N°2
Quelles sont les valeurs de L1 et L2 à la fin de la suite d’instructions suivantes :
L1 = creer_liste()
L1 = inserer(L1, "Alice")
L2 = inserer(L1, "Bob")
L1 = inserer(L1, "Charlie")
……………………………………………………………………………………………………………………………………………………………….……………………
Exercice N°3
Donner les valeurs de liste1, liste 2 et liste 3 à chaque étape
……………………………………………………………………………………………………………………………
……………………………………………………………
……………………………………………………………………………………………………………………………
……………………………………………………………
……………………………………………………………………………………………………………………………
……………………………………………………………
……………………………………………………………………………………………………………………………
……………………………………………………………
……………………………………………………………………………………………………………………………
……………………………………………………………
……………………………………………………………………………………………………………………………
……………………………………………………………
……………………………………………………………………………………………………………………………
……………………………………………………………
……………………………………………………………………………………………………………………………
……………………………………………………………
……………………………………………………………………………………………………………………………
……………………………………………………………
……………………………………………………………………………………………………………………………
……………………………………………………………
……………………………………………………………………………………………………………………………
……………………………………………………………
……………………………………………………………………………………………………………………………
……………………………………………………………
CHAPITRE 3–Structures de données 7
N.S.I Term
6.3 Implémentation par un tableau
6.3.1 Définition
Une autre implémentation possible d'une liste consiste à utiliser un tableau. La liste est alors représentée par un
tuple constitué du tableu et du nombre d'éléments de la liste. La représentation de la liste de l'exemple précédent
avec un tableau de taille 5 est alors la suivante :
MOUSS
NOURR ALICE
A
Le tableau ayant une taille fixe, il faut prévoir que la capacité de la liste est limitée à la taille du tableau. IL est aussi
possible de créer un tableau plus grand et d'y recopier la liste lorsque nécessaire.
Les tableaux Python sont en réalité des listes puisqu'ils sont extensibles avec la méthode append .
6.3.2 Exercices
Voici les opérations de l’interface qui peuvent être effectuées sur une liste avec une implémentation tableau. Dans le
TP Notebook, vous allez devoir écrire les fonctions suivantes.
Exercice N°5
Ecrire ces fonctions en python :
……………………………………………………………………………………………………………………………
……………………………………………………………
……………………………………………………………………………………………………………………………
……………………………………………………………
……………………………………………………………………………………………………………………………
……………………………………………………………
……………………………………………………………………………………………………………………………
……………………………………………………………
……………………………………………………………………………………………………………………………
……………………………………………………………
……………………………………………………………
……………………………………………………………………………………………………………………………
……………………………………………………………
……………………………………………………………………………………………………………………………
……………………………………………………………
……………………………………………………………………………………………………………………………
……………………………………………………………
……………………………………………………………………………………………………………………………
……………………………………………………………
……………………………………………………………………………………………………………………………
……………………………………………………………
……………………………………………………………………………………………………………………………
……………………………………………………………
……………………………………………………………………………………………………………………………
……………………………………………………………
……………………………………………………………………………………………………………………………
……………………………………………………………
……………………………………………………………………………………………………………………………
……………………………………………………………
……………………………………………………………………………………………………………………………
……………………………………………………………
……………………………………………………………………………………………………………………………
……………………………………………………………
……………………………………………………………………………………………………………………………
……………………………………………………………
……………………………………………………………………………………………………………………………
……………………………………………………………
……………………………………………………………………………………………………………………………
……………………………………………………………
……………………………………………………………
……………………………………………………………………………………………………………………………
……………………………………………………………
……………………………………………………………………………………………………………………………
……………………………………………………………
……………………………………………………………………………………………………………………………
……………………………………………………………
……………………………………………………………………………………………………………………………
……………………………………………………………
……………………………………………………………………………………………………………………………
……………………………………………………………
……………………………………………………………………………………………………………………………
……………………………………………………………
……………………………………………………………………………………………………………………………
……………………………………………………………
……………………………………………………………………………………………………………………………
……………………………………………………………
……………………………………………………………………………………………………………………………
……………………………………………………………
……………………………………………………………………………………………………………………………
……………………………………………………………
……………………………………………………………………………………………………………………………
……………………………………………………………
……………………………………………………………………………………………………………………………
……………………………………………………………
……………………………………………………………………………………………………………………………
……………………………………………………………
……………………………………………………………………………………………………………………………
……………………………………………………………
……………………………………………………………
……………………………………………………………………………………………………………………………
……………………………………………………………
……………………………………………………………………………………………………………………………
……………………………………………………………
……………………………………………………………………………………………………………………………
……………………………………………………………
……………………………………………………………………………………………………………………………
……………………………………………………………
……………………………………………………………………………………………………………………………
……………………………………………………………
……………………………………………………………………………………………………………………………
……………………………………………………………
……………………………………………………………………………………………………………………………
……………………………………………………………
……………………………………………………………………………………………………………………………
……………………………………………………………
……………………………………………………………………………………………………………………………
……………………………………………………………
……………………………………………………………………………………………………………………………
……………………………………………………………
……………………………………………………………………………………………………………………………
……………………………………………………………
……………………………………………………………………………………………………………………………
……………………………………………………………
7 Les piles
7.1 Présentation
Les piles sont très utilisées sur les plateformes de streaming musical. Lorsque vous
demandez à la plateforme de lire une chanson à la suite, elle va ajouter cette
dernière tout en haut de la liste "en attente de lecture".
Il s’agit d’une structure de données qui donne accès en priorité aux dernières
données ajoutées. Ainsi, la dernière information ajoutée sera la première à en sortir.
Les piles sont ce que l’on appelle un traitement des données LIFO (Last In First
Out, ou dans la langue de Molière : dernier ajouté premier parti).
7.4.1 Exercices
Exercice N°6
……………………………………………………………………………………
P= creer_pile()
empiler(P,4) ……………………………………………………………………………………
empiler (P,7) ……………………………………………………………………………………
a = depiler(P)
b = taille(P)
c = depiler(P)
empiler(P,3)
empiler(P,2)
d = taille(P)
……………………………………………………………………………………
……………………………………………………………………………………
CHAPITRE 3–Structures de données 12
N.S.I Term
Exercice N°7
pile = creer_pile()
empiler(pile, 4)
empiler (pile, 3)
empiler (pile, 8)
somme = 0
pile2 = créer_pile()
while est_vide(pile) != True :
element = depiler(pile)
somme += element
empiler(pile2, element)
……………………………………………………………………………………………………………………………
……………………………………………………………
……………………………………………………………………………………………………………………………
……………………………………………………………
……………………………………………………………………………………………………………………………
……………………………………………………………
……………………………………………………………………………………………………………………………
……………………………………………………………
……………………………………………………………………………………………………………………………
……………………………………………………………
……………………………………………………………………………………………………………………………
……………………………………………………………
……………………………………………………………………………………………………………………………
……………………………………………………………
……………………………………………………………………………………………………………………………
……………………………………………………………
……………………………………………………………………………………………………………………………
……………………………………………………………
……………………………………………………………………………………………………………………………
……………………………………………………………
……………………………………………………………………………………………………………………………
……………………………………………………………
……………………………………………………………
……………………………………………………………………………………………………………………………
……………………………………………………………
……………………………………………………………………………………………………………………………
……………………………………………………………
……………………………………………………………………………………………………………………………
……………………………………………………………
……………………………………………………………………………………………………………………………
……………………………………………………………
……………………………………………………………………………………………………………………………
……………………………………………………………
……………………………………………………………………………………………………………………………
……………………………………………………………
……………………………………………………………………………………………………………………………
……………………………………………………………………………………………………………………………
…………………………………………………………………………………………………………………………
……………………………………………………………………………………………………………………………
……………………………………………………………
Exercice N°8
On considère l’implémentation python des deux fonctions suivante :
def creer_pile_vide():
"""
Créer une pile vide
"""
return []
def est_vide(p):
"""
Renvoie un booleen : True si la pile est vide, False sinon
"""
if p == []:
return True
else:
return False
1. Ecrire une fonction empiler(pile, element) qui rajoute l’élément dans la pile
……………………………………………………………………………………………………………………………
…………………………………………………………………………………………………………………………
……………………………………………………………………………………………………………………………
……………………………………………………………
2. Ecrire une fonction dépiler(pile) qui enlève le dernier élément ajouté dans la pile et retourne cet élément
(cette fonction nécessite une assertion)
……………………………………………………………………………………………………………………………
……………………………………………………………………………………………………………………………
…………………………………………………………………………………………………………………………
……………………………………………………………………………………………………………………………
……………………………………………………………
……………………………………………………………………………………………………………………………
……………………………………………………………………………………………………………………………
…………………………………………………………………………………………………………………………
……………………………………………………………………………………………………………………………
……………………………………………………………
3. Ecrire une fonction inverse_pile(pile) qui prend en entrée une pile et renvoie une nouvelle pile inversée.
……………………………………………………………………………………………………………………………
……………………………………………………………………………………………………………………………
…………………………………………………………………………………………………………………………
……………………………………………………………………………………………………………………………
……………………………………………………………
……………………………………………………………………………………………………………………………
……………………………………………………………………………………………………………………………
…………………………………………………………………………………………………………………………
……………………………………………………………………………………………………………………………
……………………………………………………………
Exercice N°9
def fonction_mystere(p):
" " " L’entrée est une pile " " "
Q = creer_pile_vide()
n = 0
while not(est_vide(p)):
n += 1
x = depiler(p)
empiler(Q, x)
while not(est_vide(Q)):
x = depiler(Q)
empiler(p, x)
return n
……………………………………………………………………………………………………………………………
……………………………………………………………………………………………………………………………
…………………………………………………………………………………………………………………………
……………………………………………………………………………………………………………………………
……………………………………………………………
……………………………………………………………………………………………………………………………
……………………………………………………………………………………………………………………………
…………………………………………………………………………………………………………………………
……………………………………………………………………………………………………………………………
……………………………………………………………
……………………………………………………………………………………………………………………………
……………………………………………………………………………………………………………………………
…………………………………………………………………………………………………………………………
……………………………………………………………………………………………………………………………
……………………………………………………………
……………………………………………………………………………………………………………………………
……………………………………………………………………………………………………………………………
…………………………………………………………………………………………………………………………
……………………………………………………………………………………………………………………………
……………………………………………………………
……………………………………………………………………………………………………………………………
……………………………………………………………………………………………………………………………
…………………………………………………………………………………………………………………………
……………………………………………………………………………………………………………………………
……………………………………………………………
8 Les files
8.1 Présentation
Une file est une structure de données dans laquelle on accède aux éléments
suivant la règle du premier arrivé premier sorti. Autrement dit, on ne peut
accéder qu’à l’objet situé au début de la file. On décrit souvent ce comportement
par l’expression : FIFO (First In, First Out). La file comporte une tête et une queue.
Analogie : La file de clients qui attend à un guichet ou à une caisse convient à cette description. Le client qui
passe le premier est normalement celui qui est arrivé le premier.
Il est nécessaire d’avoir deux pointeurs pour une file. Un pour gérer les entrées en queue et un pour gérer les sorties
en tête. Deux opérations sont particulièrement utiles :
Tête 0 1 2 3 4 5 6 7
Queue
0 1 2 3 4 5 6 7 Enfiler
Défiler 0 1 2 3 4 5 6 7
def creer_file_vide():
def enfiler(file,element):
"""L'élément est inséré en queue de la file)"""
liste = [None] * (len(file)+1)
for indice in range(len(file)):
liste[indice]=file[indice]
liste[len(file)]=element
return liste
def defiler(file):
"""L'élément situé en tête de la file est enlevé de la file"""
if est_vide(file) != True :
liste = [None] * (len(file)-1)
for indice in range (len(file)-1):
liste[indice] = file[indice+1]
return liste
else:
return file
def est_vide(file):
"""Retourne vrai si la file est vide"""
return(file == [])
Ceci est UNE implémentation possible. A la fin, la manière avec laquelle la file est implémentée n’a pas d’importance
réelle tant que le fonctionnement global correspond à du first in last out.
8.3 Exercices
Exercice N°10
On donne la séquence d’instructions
suivante :
Illustrer le résultat de chaque étape de cette séquence :
f = creer_file_vide()
f = enfiler(f,4)
f = enfiler(f,1)
f = enfiler(f,3)
n = defiler(f)
f = enfiler(f,8)
n = defiler(f)
Exercice N°11
On donne la file liste_attente = ["Cersei","Jaime"] , illustrer à l’aide de schéma toutes les étapes de liste et file lors de
l’instruction enfiler(liste_attente, "Tyrion")
Exercice N°12
On suppose que l’on a déjà un saisis dans l’ordre alphabétique tab_1 = ["A", "B", "C", "D", "E"] tableau tab_1 qui
contient les éléments suivants
……………………………………………………………………………………………………………………………………………………………………………………
2. Proposer une séquence d’instructions (à l’aide de deux piles P1 et P2) qui crée une pile
["E", "D", "C", "B", "A"] puis inverse l’ordre chronologique. (en 10 lignes). Accompagné d’un schéma c’est
mieux !
……………………………………………………………………………………………………………………………
……………………………………………………………………………………………………………………………
…………………………………………………………………………………………………………………………
……………………………………………………………………………………………………………………………
……………………………………………………………………………………………………………………………
……………………………………………………………………………………………………………………………
…………………………………………………………
……………………………………………………………………………………………………………………………
……………………………………………………………
……………………………………………………………………………………………………………………………
……………………………………………………………………………………………………………………………
…………………………………………………………………………………………………………………………
……………………………………………………………………………………………………………………………
……………………………………………………………
Exercice N°13
La notation polonaise inversée (NPI) permet d’écrire des opérations arithmétiques, sans utiliser de parenthèses. Ici,
nous nous limiterons à des nombres entiers naturels et aux opérations +, -, * et / sur eux. Dans cette notation, les
opérateurs sont écrits après les opérandes (nombre entiers naturels). Par exemple l’expression :
On écrit et on exécute les opérations dans le sens des priorités vues en cours de mathématiques. Dans cette
notation, on réalise :
L’addition entre 3 et 2 (3 2 +)
La multiplication entre le précédent résultat et 13 (13 *)
On a ainsi le résultat.
1. Donner la file correspondante à la saisie NPI de l’exemple. Faire de même avec la pile.
2. Quelle est la structure adaptée à la résolution de l’expression ?On notera qu’il faut stocker le résultat
intermédiaire dans la structure pour effectuer la saisie des calculs.
3. En utilisant les opérations du type Pile, proposer une permettant d’afficher le résultat d’une expression en
NPI. On va considérer qu’on a déjà la fonction inverser_pile(pile) qui retourne une pile qui est dans l’ordre
inverser de celle donnée en argument
……………………………………………………………………………………………………………………………
……………………………………………………………………………………………………………………………
…………………………………………………………………………………………………………………………
……………………………………………………………………………………………………………………………
……………………………………………………………
CHAPITRE 3–Structures de données 20
N.S.I Term
……………………………………………………………………………………………………………………………
……………………………………………………………………………………………………………………………
…………………………………………………………………………………………………………………………
……………………………………………………………………………………………………………………………
……………………………………………………………
……………………………………………………………………………………………………………………………
……………………………………………………………………………………………………………………………
…………………………………………………………………………………………………………………………
……………………………………………………………………………………………………………………………
……………………………………………………………
……………………………………………………………………………………………………………………………
……………………………………………………………………………………………………………………………
…………………………………………………………………………………………………………………………
……………………………………………………………………………………………………………………………
……………………………………………………………
……………………………………………………………………………………………………………………………
……………………………………………………………………………………………………………………………
…………………………………………………………………………………………………………………………
……………………………………………………………………………………………………………………………
……………………………………………………………
……………………………………………………………………………………………………………………………
……………………………………………………………………………………………………………………………
…………………………………………………………………………………………………………………………
……………………………………………………………………………………………………………………………
……………………………………………………………
……………………………………………………………………………………………………………………………
……………………………………………………………………………………………………………………………
…………………………………………………………………………………………………………………………
……………………………………………………………………………………………………………………………
……………………………………………………………
……………………………………………………………………………………………………………………………
…………………………………………………………………………………………………………………………
……………………………………………………………………………………………………………………………
……………………………………………………………
……………………………………………………………………………………………………………………………
……………………………………………………………………………………………………………………………
…………………………………………………………………………………………………………………………
……………………………………………………………………………………………………………………………
……………………………………………………………
……………………………………………………………………………………………………………………………
……………………………………………………………………………………………………………………………
…………………………………………………………………………………………………………………………
……………………………………………………………………………………………………………………………
……………………………………………………………
……………………………………………………………………………………………………………………………
……………………………………………………………………………………………………………………………
…………………………………………………………………………………………………………………………
……………………………………………………………………………………………………………………………
……………………………………………………………
……………………………………………………………………………………………………………………………
……………………………………………………………………………………………………………………………
…………………………………………………………………………………………………………………………
……………………………………………………………………………………………………………………………
……………………………………………………………
……………………………………………………………………………………………………………………………
……………………………………………………………………………………………………………………………
…………………………………………………………………………………………………………………………
……………………………………………………………………………………………………………………………
……………………………………………………………
……………………………………………………………………………………………………………………………
…………………………………………………………………………………………………………………………
……………………………………………………………………………………………………………………………
……………………………………………………………
……………………………………………………………………………………………………………………………
……………………………………………………………………………………………………………………………
…………………………………………………………………………………………………………………………
……………………………………………………………………………………………………………………………
……………………………………………………………