Ce cours concerne les arbres, structure de données organisant les données de manière hiérarchique dans de nœuds reliés entre eux par une relation parent-enfant. Le cours présente les arbres généraux et ensuite les arbres binaires, où chaque nœud possède 0 ou 2 enfants. Enfin, le cours termine en présentant des algorithmes de recherche et en particulier l'arbre binaire de recherche.
Ce cours concerne les arbres, structure de données organisant les données de manière hiérarchique dans de nœuds reliés entre eux par une relation parent-enfant. Le cours présente les arbres généraux et ensuite les arbres binaires, où chaque nœud possède 0 ou 2 enfants. Enfin, le cours termine en présentant des algorithmes de recherche et en particulier l'arbre binaire de recherche.
Chapitre8: Collections et Enumerations En JavaAziz Darouichi
Voici le chapitre 8 sur les collections et les énumerations en Java.
Si vous avez des remarques ou suggestions afin de le parfaire.
N’hésitez pas à me contacter via mon email:
pr.azizdarouichi@gmail.com.
Bonne lecture.
Venez découvrir le concept de Fold !
Hérité de la programmation fonctionnelle, le Fold abstrait l'itération sur vos structures de données, et améliore l'expressivité de votre code.
Avec de vrais bouts de Java 8 et une pincée de Haskell !
Ce cours introduit à la notion de type abstrait de données (TAD). On commence par y découvrir les principes de complexité temporelle et spatiale permettant d'analyser les performances d'une structure de données et d'algorithmes. Ensuite, le cours présente plusieurs TAD : la pile, la file, le deque et le vecteur. Enfin, il présente comment implémenter des TAD avec des structures chainées.
Les variables, telles que nous les avons vues dans les chapitres précédents, ne permettent de stocker qu'une seule donnée à la fois. Or, pour de très nombreux programmes, on a besoin d'avoir plusieurs données du même type et qui jouent quasiment le même rôle. Pensez par exemple à la liste des utilisateurs d'un site web, cela représente plusieurs variables de type string.
L’utilisation des variables distinctes, dans ce cas, seraient beaucoup trop lourdes à gérer. Heureusement, le C++ propose un moyen simple de regrouper ces données dans un seul support. Il s’agit des tableaux.
Les tableaux sont des structures de données constituées d'un certain nombre d'éléments de même type. Ils correspondent aux vecteurs et matrices en mathématiques. Un tableau est caractérisé par sa taille et par le type de ses éléments.
Dans ce chapitre, je vais vous apprendre à manipuler deux sortes de tableaux :
Les tableaux statiques : ceux dont la taille est connue à l'avance, elle est donc figée une fois pour toute et ne peut pas être modifiée en cours d'exécution du programme.
Les tableaux dynamiques : ceux dont la taille peut varier au cours de l'exécution du programme.
Les chaînes de caractères sont déclarées en C++ comme tableaux de caractères et permettent l'utilisation d'un certain nombre de notations et de fonctions spéciales. Les particularités des tableaux de caractères seront traitées séparément à la fin de ce chapitre.
Objectif général : Acquérir les connaissances nécessaires à la programmation avec le langage Python
Objectifs opérationnels :
- Mémoriser des données primitives
- Traiter des données
- Communiquer avec l’extérieur
- Contrôler le flux d’exécution des instructions
- Mémoriser des données composites
- Découper et réutiliser du code
Voici le chapitre sur les tableaux en C++.
La nouvelle version de 2019 est ici:
https://fr.slideshare.net/AzizDarouichi/chapitre3tableauxencppv2019
Si vous avez des remarques ou suggestions afin de le parfaire.
N’hésitez pas à me contacter via mon email:
pr.azizdarouichi@gmail.com.
Chapitre8: Collections et Enumerations En JavaAziz Darouichi
Voici le chapitre 8 sur les collections et les énumerations en Java.
Si vous avez des remarques ou suggestions afin de le parfaire.
N’hésitez pas à me contacter via mon email:
pr.azizdarouichi@gmail.com.
Bonne lecture.
Venez découvrir le concept de Fold !
Hérité de la programmation fonctionnelle, le Fold abstrait l'itération sur vos structures de données, et améliore l'expressivité de votre code.
Avec de vrais bouts de Java 8 et une pincée de Haskell !
Ce cours introduit à la notion de type abstrait de données (TAD). On commence par y découvrir les principes de complexité temporelle et spatiale permettant d'analyser les performances d'une structure de données et d'algorithmes. Ensuite, le cours présente plusieurs TAD : la pile, la file, le deque et le vecteur. Enfin, il présente comment implémenter des TAD avec des structures chainées.
Les variables, telles que nous les avons vues dans les chapitres précédents, ne permettent de stocker qu'une seule donnée à la fois. Or, pour de très nombreux programmes, on a besoin d'avoir plusieurs données du même type et qui jouent quasiment le même rôle. Pensez par exemple à la liste des utilisateurs d'un site web, cela représente plusieurs variables de type string.
L’utilisation des variables distinctes, dans ce cas, seraient beaucoup trop lourdes à gérer. Heureusement, le C++ propose un moyen simple de regrouper ces données dans un seul support. Il s’agit des tableaux.
Les tableaux sont des structures de données constituées d'un certain nombre d'éléments de même type. Ils correspondent aux vecteurs et matrices en mathématiques. Un tableau est caractérisé par sa taille et par le type de ses éléments.
Dans ce chapitre, je vais vous apprendre à manipuler deux sortes de tableaux :
Les tableaux statiques : ceux dont la taille est connue à l'avance, elle est donc figée une fois pour toute et ne peut pas être modifiée en cours d'exécution du programme.
Les tableaux dynamiques : ceux dont la taille peut varier au cours de l'exécution du programme.
Les chaînes de caractères sont déclarées en C++ comme tableaux de caractères et permettent l'utilisation d'un certain nombre de notations et de fonctions spéciales. Les particularités des tableaux de caractères seront traitées séparément à la fin de ce chapitre.
Objectif général : Acquérir les connaissances nécessaires à la programmation avec le langage Python
Objectifs opérationnels :
- Mémoriser des données primitives
- Traiter des données
- Communiquer avec l’extérieur
- Contrôler le flux d’exécution des instructions
- Mémoriser des données composites
- Découper et réutiliser du code
Voici le chapitre sur les tableaux en C++.
La nouvelle version de 2019 est ici:
https://fr.slideshare.net/AzizDarouichi/chapitre3tableauxencppv2019
Si vous avez des remarques ou suggestions afin de le parfaire.
N’hésitez pas à me contacter via mon email:
pr.azizdarouichi@gmail.com.
Comment utiliser microsoft Excel ? Guide Complet et Conseils Pratiques ( Oui)mar yame
C'est quoi microsoft Excel?
Découvrez comment développer vos compétences en Excel avec notre guide. Cette présentation vous offre une introduction aux fondamentaux d'Excel, des fonctions de base aux opérations avancées, accompagnée de conseils pratiques pour améliorer et optimiser votre utilisation d'Excel au quotidien.
1. LOGO
Soltana Ghanem : sultana.ghanem@gmail.com
1ère année IAG
2009 - 2010
Institut Supérieur
de Gestion de Tunis
2. Objectifs
être capable de choisir la structure adéquate à chaque
problème
connaître les structures de données linéaires
pouvoir implémenter les structures de données
linéaires
connaître les avantages et inconvénients
de chaque structure
connaître l’utilité des structures de données
L’étudiant devra :
2
3. Références
Michel Divay : Algorithmes et structures de données
génériques
Abdelali Guerid, Pierre Breguet, Henri Röthlisberger :
Algorithmes et structures de données avec C++ et Java
Cours Pr. Nahla Ben Amor : Algorithmes et structures de
données, http://isgprog2.ifrance.com/
3
5. Définitions
5
C’est un programme écrit
avec un langage naturelAlgorithme
C’est une structure logique destinée à contenir des
données, afin de leur donner une organisation
permettant de simplifier leur traitement
Structure
de données
6. Définitions
6
Mise en situation :
Vous voulez créer une application qui calcule votre
moyenne (6 matières)
Vous décidez de créer 12 variables qui serviront à
contenir vos notes : mat1_exam, mat2_exam..
On vous demande de réaliser une application qui calcule la
moyenne de tout les étudiants de ta classe (40)
Vous allez définir et gérer manuellement 40 * 12 variables!
7. Tableau contiguë
7
Un tableau est un ensemble de cellules contigües visant
à contenir des données homogènes
Un tableau est caractérisé par :
• Un nom
• Une taille physique
• Le type des données qu’il va contenir
8. Tableau contiguë
8
12 7 8 18 3T =
Indice 21 3 4 5
Exemple :
• Pour récupérer la valeur d’une case :
Nom_du_tableau [ indice ] T[4] contient la valeur 18
• Pour modifier une case :
Nom_du_tableau [ indice ] = Valeur T[2] = 200
12 200 8 18 3
21 3 4 5
9. Tableau contiguë
9
Manipulation des tableaux contigües :
Suppression
Taille () : entier= une fonction qui retourne la taille logique du
tableau
• A la création du tableau, initialisez la variable taille 0
• Si une opération d’ajout est effectuée avec succès, alors taille taille +1
• Si une opération de suppression est effectuée avec succès, alors taille taille -
1
Récupérer ( indice : entier ) : Objet = fonction qui retourne l’élément se
trouvant à la position indice
Pré condition :
• indice > 0 et indice <= taille ()
Traitement : retourner ( tableau [ indice ] )
10. Tableau contiguë
10
Ajouter ( élément : objet , indice : entier ) : booléenne = fonction qui
ajoute l’élément dans le tableau à la position indice
Pré condition :
• taille() < taille physique
• indice > 0 et indice <= taille () + 1
• élément à ajouter doit être de même type que les
éléments contenus dans le tableau
12 7 8 18 3
Ajouter ( 200 , 3 )
21 3 4 5
12 7 8 8 18 3
12 7 200 8 18 3
21 3 4 5
21 3 4 5 6
11. Tableau contiguë
11
Supprimer ( indice : entier ) : booléenne = fonction qui supprime
l’élément se trouvant à la position indice
Pré condition :
• indice > 0 et indice <= taille ()
Supprimer ( 3 )
12 7 200 8 18
21 3 4 5
12 7 8 8 18
21 3 4 5
12 7 8 18 18
21 3 4 5
L’élément d’indice 5 sera toujours présent mais l’décrémentation de la
taille le rendra inaccessible .
12. Tableau contiguë
12
InconvénientsAvantages
Simple à implémenter
et à manipuler
Accès directe aux
données
On doit définir la taille
maximale au préalable
L’espace mémoire doit
être contiguë
Utilisation non optimisée
de la mémoire
Ajout et suppression en
fin de tableau en O(1)
13. Liste chainée
13
Une liste chainée est un ensemble
de nœuds reliés entre eux
Une liste peut être caractériser par un nœud
tête. Ce dernier sera le point de départ pour
retrouver tous les autres nœuds
Un nœud est une entité renfermant de
l’information et ayant un pointeur sur le
nœud qui la suit
LISTE
Nœud
Implémentation
14. Liste chainée
14
12 7 8 18 3
Nœud
Pointeur
Tête de liste
suivant suivant
Exemple :
• la tête de liste représente le point d’accès à la liste
• Chaque nœud :
• Renferme une information
• Indique l’emplacement du prochain nœud
• Le dernier nœud ne pointe vers rien (null)
19. Liste chainée
19
InconvénientsAvantages
Meilleur utilisation de la
mémoire
Toutes les opérations Sur
la tête de liste sont en O(1)
L’accès aux données
est plus couteux O(n)
Ajout à la fin de liste
en O(n)
L’espace mémoire ne doit
pas être contiguë
La taille de la liste peut ne
pas être définie au préalable
Gestion des
pointeurs
20. File
20
Une file (Queue) est un type particulier de liste, où les
éléments sont insérés en queue et supprimer en tête
Le nom vient des files d’attente, où le premier arrivé est
le premier servi : FIFO (First In First Out )
Les files sont d’un usage très répondus dans la
programmation des système d’exploitation : gestion des
processus, gestion des imprimantes…
21. File
21
Exemple :
Un nouveau venu
Point de sorite
12 7 8 18 3
14
1 2 3 4 5
Station de traitement
• Seul le premier élément peut quitter la file
• Les nouveaux éléments sont ajoutés à la fin de la file
22. File
22
Implémentation
Puisque les Files sont des cas particuliers de listes pourquoi ne pas
utiliser ces dernières pour les implémenter ?
Doit-on utiliser les tableaux contigües ou les listes chainées?
Liste doublement chainée !!
Enfiler ( élément ) revient à faire ajouter ( élément, taille ()+1 )
Défiler ( ) revient à faire supprimer (1)
23. Pile
23
Une pile (stack) représente une séquences d’éléments
accessibles par une seule extrémité appelée sommet
La stratégie de gestion d’une pile est : dernier arrivé,
premier servi : LIFO ( Last In First Out )
Les opérations de mise à jour (insertion et suppression),
d’après la définition, sont seulement appliquées sur le
sommet
24. Pile
24
12
7
8
18
3
Exemple :
Base
Sommet Je vois mieux
maintenant !!
• Le sommet de la pile est le seul élément manipulable
• Pour manipuler un élément se trouvant au milieu de la pile il faudra
dépiler tout ces prédécesseurs
•Si on ajoute un nouvel élément il serra empiler au dessus du sommet
25. Pile
25
Doit-on utiliser les tableaux contigües ou les listes chainées?
Tableau contiguë !!
Empiler ( élément ) revient à faire ajouter ( élément, taille () +1 )
Dépiler ( ) revient à faire supprimer (taille () )
Sommet ( ) revient à faire récupérer ( taille () )
Les piles sont utilisées pour gérer les appels récursifs !!!!
liste chainée !!
26. Exercice : Quiz
26
Quel est la structure de données linéaire la plus adéquate
à chaque problème?
1 La gestion d’une équipe de football
2 La gestion des demandes de location de voitures
Le problème des tours de Hanoï33
44 La gestion des clients d’une banque
Tableau contiguë
File
Pile
Liste chainée