ETNA – 1ème année Guillaume Belmas –

Slides:



Advertisements
Présentations similaires
Cours n° 7 Standard Template Library II.
Advertisements

Cours n° 6 Standard Template Library I.
Piles, files et listes: notions théoriques
Structures de données et complexité
Structures de données et complexité LIFO – FILO – FIFO – etc…
Au programme du jour …. Un peu plus de structures de données
GEF 243B Programmation informatique appliquée
Cours n° 8 Conception et Programmation à Objets
1 UMLV 1. Introduction 2. Hachage ouvert 3. Hachage fermé 4. Implémentation des fonctions Méthodes de hachage.
La programmation générique avec la STL EIUMLV - Informatique et Réseaux 99 Benoît ROMAND.
Cours d’Algorithmique
Algorithme et structure de données
Les structures de données
Chapitre IV. Structures linéaires (piles, files, listes chaînées)
Cours ENSG 2A, Septembre 2002 Guillaume Caumon
ALGORITHMES RECURSIFS
Structures collectives en Java
UE NFA006 STRUCTURES DE DONNEES
Structures de données linéaires
IPA – Catherine Faron Zucke et Anne Marie Deryr. suite ordonnée d'éléments de taille variable ArrayList liste; liste = new ArrayList (); Ne peuvent contenir.
Cours d’Algorithmique
Structures de données et algorithmes – C5 Maria-Iuliana Dascalu, PhD
II. Chaînage, SDD séquentielles
Les algorithmes: complexité et notation asymptotique
Leçon 6 : Structures de données dynamiques IUP 2 Génie Informatique Méthode et Outils pour la Programmation Françoise Greffier.
RECURSIVITE ARBRES BINAIRES
8PRO100 Éléments de programmation Allocation dynamique de la mémoire.
II. Chaînage, SDD séquentielles
TRAITEMENT DE STRUCTURES
IFT-2000: Structures de Données Listes chaînées Dominic Genest, 2009.
Standard Template Library (STL)
Structures de données IFT-2000
Etude de cas : buffer clavier
IFT-2000: Structures de données
IFT-2000: Structures de données Les graphes Dominic Genest, 2009.
IFT-10541A : Hiver 2003 Semaine 5 : Piles et files.
Structures de données IFT-2000
Structures de données IFT-2000 Abder Alikacem Standard Template library Édition Septembre 2009 Département dinformatique et de génie logiciel.
Présentation Structures de Données et TDA
Contrôle de types Les types en programmation Expressions de types Un contrôleur de types Equivalence de types Conversions de types Généricité.

Piles Premier arrivé, dernier servi: LIFO (Last In, First Out) Liste à usage restreint: Enlève et insère un élément seulement à un bout de la liste. Notation:
IFT-2000: Structures de données Piles et files Dominic Genest, 2009.
Structures de données IFT-2000
Structures de données IFT-10541
Structures de données IFT-2000 Abder Alikacem Retour sur les listes ordonnées Département dinformatique et de génie logiciel Édition Septembre 2009.
Structures de données IFT-2000
Le langage C Structures de données
Ch. PAUL - Piles et Files à l'aide de listes chainées
LES PILES ET FILES.
Les Pointeurs et les Tableaux Statiques et Tableaux Dynamiques
1 Structures des données. 2  Le tableau permettait de désigner sous un seul nom un ensemble de valeurs de même type, chacune d'entre elles étant repérée.
Structures de données élémentaires dans le contexte du TP #1
Arbres binaires et tables de hachage
Chaînage et LSC : motivation et principe Manipuler la LSC : exemples Variantes : LDC, liste circulaire, … Etude de cas : réalisation d’un buffer clavier.
II. Chaînage, SDD séquentielles
TABLEAUX des POINTEURS TRAITEMENT DE STRUCTURES
Classe 1 CSI2572 Autres modificateurs de déclaration de variables: & volatile & register & static & auto & extern & const volatile Indique au compilateur.
Structures de données élémentaires
Liste Une liste est une séquence d’éléments. Concept important: Chaque élément possède une position dans la liste. Notation: De quelles opérations a-t-on.
La récursivité Mireille Goud HEG Vd AlgSD - Résurisivité.
1 Listes des méthodes de la classe string, et exemples.
 Chaînage et LSC : motivation et principe Manipuler la LSC : exemples Variantes : LDC, liste circulaire, … Etude de cas : réalisation d’un buffer clavier.
Chaînage et LSC : motivation et principe Manipuler la LSC : exemples Variantes : LDC, liste circulaire, … Etude de cas : réalisation d’un buffer clavier.
Types abstraits de données (TAD)
3ième Classe (Mardi, 23 Septembre) CSI2572. O jourd'8: E Allocation de mémoire E Déallocation de mémoire E Tableaux (n dimensions) E Arithmetique des.
CSI2510 Structures des Données et Algorithmes
Informatique 2A Langage C 5ème séance. Déroulement de la séance 5 1 ère partie Étude des chaînes de caractères 2 ème partie Les structures 3.
Les structures de base Listes chainées. Listes Les listes(similaire aux tableaux) sont des structures informatiques qui permettent de garder en mémoire.
Transcription de la présentation:

ETNA – 1ème année Guillaume Belmas – guillaume@3ie.org Algorithmique ETNA – 1ème année Guillaume Belmas – guillaume@3ie.org

Plan de cours Cours 1: Listes chaînées, piles et files Cours 2: Arbres, tables de hash Cours 3: Graphes Cours 3 bis: Coding guidelines Cours 4: Modélisation objet: rappels Cours 5: Design patterns 1 Cours 6: Design patterns 2

Listes chaînées, piles et files

Rappels Analyse d’algorithme Analyse pessimiste des performances Le pire cas d’une recherche arrive souvent ! Le cas optimal ne nous apprend rien Le cas moyen est difficile à obtenir Le pire cas garantit que l’algorithme ne fera jamais moins bien

Rappels Complexité d’un algorithme Somme des coûts des actions élémentaires S’exprime en fonction du volume de données à traiter Complexité != Temps d’exécution

Rappels O(1) = Exécution en temps constant (le mieux !) O(n) = Parcours d’une liste de n éléments O(n2) = Parcours d’une matrice Plus la complexité est élevée, moins l’algorithme est efficace pour un grand nombre de données

Rappels Les structures (agrégats) Éléments de différents types comme type unique Utile pour représenter les données métier typedef struct s_personne { char *Nom, int Age, char Sexe } t_personne;

Les listes chaînées

Les listes chaînées Définition Ensemble d’éléments de même type liés par des pointeurs 1 élément = 2 parties (agrégat) Le champ de données Le pointeur suivant Données Élément suivant

Les listes chaînées Définition récursive Une liste est: Soit une liste vide (représentée par le NULL) Soit un élément suivit d’une liste Données Élément suivant Tête de liste

Les opérations de base Déclaration de la structure d’un élément struct s_list { struct s_list *suivant; void *donnee; }; typedef struct s_list t_list; Nouvelle liste t_list *liste = (t_list)malloc(sizeof(t_list)); liste->suivant = null; liste->donnee = …

Les opérations de base Insertion d’un élément Prototype: int list_ins_next(t_list **list, t_list *element, void *donnee) list : la liste de destination element: élément qui précédera le nouvel élément donnee: données du nouvel élément Complexité d’exécution O(1) pour un ajout en tête de liste Éventuellement O(n) pour un ajout avec recherche

Les opérations de base

Les opérations de base int list_ins_next(t_list **liste, t_list *element, const void *donnee) { t_list *nouv_element; if ((nouv_element = (t_list *)malloc(sizeof(t_list))) == NULL) return -1; nouv_element->donnee = (void *)donnee; if (element == NULL) // Insertion en tête de liste nouv_element->suivant = *liste; *liste = nouv_element; }

Les opérations de base else { nouv_element->suivant = element->suivant; element->suivant = nouv_element; } return 0;

Les opérations de base Suppression d’un élément Prototype: int list_rem_next(t_list **list, t_list *element, void **donnee) list : la liste de destination element: élément qui précédera le nouvel élément donnee: données du nouvel élément Complexité d’exécution O(1) pour un ajout en tête de liste Éventuellement O(n) pour un ajout avec recherche

Les opérations de base

Les opérations de base int list_rem_next(t_list **liste, t_list *element, void **donnee) { t_list *ancien_element; if (list_size(*liste) == 0) return -1; if (element == NULL) //Gestion de la suppression en tête de liste *donnee = *liste->donnee; ancien_element = *liste; *liste = *liste->suivant; }

Les opérations de base else { if (element->suivant == NULL) return -1; *donnee = element->suivant->donnee; ancien_element = element->suivant; element->suivant = element->suivant->suivant; } free(ancien_element); return 0;

Quizz A vous de jouer !  Donnez les 2 implémentations de list_size - Itérative - Récursive int list_size(t_list *liste)

Solutions Implémentation itérative int list_size(t_list *liste) { int count = 0; t_list *curseur = liste; if (curseur == NULL) return count; while (curseur->suivant != NULL) count++; curseur = curseur->suivant; }

Solutions Implémentation récursive int list_size(t_list *liste) { if (liste == NULL) return 0; else return (1 + list_size(liste->suivant)); }

Avantages Allocation dynamique de la mémoire à l’éxecution Pas besoin de connaître le volume de données lors du design de l’application Faible coût de l’insertion et de la suppression Complexité O(1) des opération d’ajout et de suppression

Inconvénients Gestion des données relativement lourde Déréférencement des pointeurs Nécessité d’avoir un pointeur par donnée Mal adapté aux parcours Pas d’accès direct aux données Parcours lent du au déréférencement

Listes chaînées VS tableaux

Les autres types de liste Listes doublement chaînées Pointeur suivant et precedent Traitement +/- lourd mais la complexité ne change pas Listes circulaires Le dernier élément pointe sur le premier Listes custom Primitives optimisées en fonction des besoins

Les piles (stacks) Stockage et restitution de l’information selon l’ordre LIFO (Last In First Out). Gestion simple avec peu de primitive « Empiler » une donnée (push) « Dépiler » une donnée (pop) Et les primitives de création et destruction

Fonctionnement

Implémentation Pas besoin d’accès direct aux données Structure sollicitant l’ajout et la suppression de données Les listes sont donc adaptées pour servir de support aux piles !

Implémentation Push (empiler) == Ajouter en début de liste Pop (dépiler) == suppression du 1° élément

Les files (queue) Stockage et restitution de l’information selon l’ordre FIFO (First In First Out). Tout comme les piles, peu de primitives: « Enfiler » (équivalent du push) « Défiler » (équivalent du pop)

Fonctionnement

Implémentation Structure très similaire aux piles Plusieurs possibilités d’implémentation Utilisation de tableaux (limite la taille de la file) Utilisation des listes chaînées Liste à 2 pointeurs (Tête et Queue)

Implémentation Enfiler() == Ajouter en FIN de liste Défiler() == Suppression du 1° élément Exemple d’utilisation Gestion des évènements dans un OS

Conclusion « L’emploi de ces structures dépend essentiellement du besoin de l’application. »

Questions