Structures de données et algorithmes – C5 Maria-Iuliana Dascalu, PhD

Slides:



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

Cours n° 6 Standard Template Library I.
Au programme du jour …. Un peu plus de structures de données
La classe String Attention ce n’est pas un type de base. Il s'agit d'une classe défini dans l’API Java (Dans le package java.lang) String s="aaa"; // s.
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.
Approfondissement du langage
Algorithme et structure de données
Chap. 1 Structures séquentielles : listes linéaires
Structures collectives en Java
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.
Structures de données et algorithmes – TP2
Les méthodes en java Une méthode est un regroupement d’instructions ayant pour but de faire un traitement bien précis. Une méthode pour être utilisée.
Leçon 6 : Structures de données dynamiques IUP 2 Génie Informatique Méthode et Outils pour la Programmation Françoise Greffier.
Bibliothèque standard du C++
8PRO100 Éléments de programmation Allocation dynamique de la mémoire.
La fonction alloue un bloc de taille size. Il faut indiquer la taille du bloc que lon veut allouer. Le premier exemple: #include void main()
IFT-2000: Structures de Données Listes chaînées Dominic Genest, 2009.
Structures de données IFT-2000
Master 1 SIGLIS Java Lecteur Stéphane Tallard Chapitre 5 – Héritage, Interfaces et Listes génériques.
Les pointeurs Enormément utilisé en C/C++ ! Pourquoi? A quoi ça sert?
Les pointeurs Modes d’adressage de variables. Définition d’un pointeur. Opérateurs de base. Opérations élémentaires. Pointeurs et tableaux. Pointeurs et.
IFT-2000: Structures de données
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.
Conteneurs STL.
Présentation Structures de Données et TDA
Vector, Iterator, LinkedList
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:
Types de données abstrait et mécanismes d'encapsulation
Standard Template Library
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
Programmation Orienté Objet en C++ Ricard julien.
Structures de données IFT-2000
Le langage C Structures de données
Le langage C Rappel Pointeurs & Allocation de mémoire.
Ch. PAUL - Piles et Files à l'aide de listes chainées
LES PILES ET FILES.
Université Mohammed V-Agdal École Supérieure de Technologie Salé
La notion de type revisitée en POO
et quelques rappels sur certains éléments du langage C
Un survol du language C.
La fonction alloue un bloc de taille size. Il faut indiquer la taille du bloc que l’on veut allouer. Le premier exemple: #include void main()
Structures de données élémentaires dans le contexte du TP #1
ETNA – 1ème année Guillaume Belmas –
TABLEAUX des POINTEURS TRAITEMENT DE STRUCTURES
Conception de Programmes - IUT de Paris - 1ère année – Cours 8 – Les entrées/sorties Comment fonctionnent les opérateurs > pour les types élémentaires.
Tutorat en bio-informatique Le 15 novembre Exercices 1 et 2 (MAT1400) - solutions Chapitre 12.2, Analyse - concepts et contextes vol. 2 19) Calculez.
Tas et Tas Tri Exercice 1 Insérer dans un min-tas vide des numéros suivants:25, 17, 36, 2, 3, 100, 1, 19, 17 Supprimer.
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.
Cours C++ Master Actuariat Séance 9: La classe Liste chaînée
 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)
CSI2510 Structures des Données et Algorithmes
CSI25101 Les structures de données de base (structures de données « concrètes ») trailer header Tableaux Listes chaînées l.
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.
M. BENJELLOUN : 2005 Le but final est de programmer un jeu où l'ordinateur choisira un nombre aléatoire entre 0 et 100 que vous devez deviner.
CSI1502: Principes fondamentaux de conception de logiciels Chapitre 12: Structures de données.
Les structures de base Listes chainées. Listes Les listes(similaire aux tableaux) sont des structures informatiques qui permettent de garder en mémoire.
Les arbres généraux.
Listes Chaînées.
Transcription de la présentation:

Structures de données et algorithmes – C5 Maria-Iuliana Dascalu, PhD

Objectifs Listes linéaires chainées – concepts et types de listes Operations de base pour mettre en œuvre des listes Piles et files d'attente mises en œuvre avec listes chainées Autres applications avec listes chainées

Généralités Une liste est une instance d'un ADT qui officialise le concept de collection ordonnée d'entités. Le contenu de chaque élément de la liste: – informations utiles – pointeur(s) vers l'élément voisin de la liste

Operations de base pour mettre en œuvre des listes ajouter - ajouter un élément (entité) à la liste: – au début – à la fin – à une position arbitraire supprimer - supprimer un élément (entité) à partir du début / fin de la liste ou prise en compte de l'indice / le contenu obtenir un élément, prise en compte l'indice mettre à jour un élément – mettre à jour de l'information / contenu d'un élément obtenir la longueur de la liste – le nombre d'éléments dans la liste ….

Mises en œuvre avec…(1) des listes linéaires liées individuellement, des listes linéaires doublement chaînées, des listes circulaires: – chaque noeud contient des informations et le lien vers ses voisins (listes doublement chaînées) ou seulement vers l'élément suivant de la liste (listes liées individuellement) ou le dernier élément est lié au premier élément (listes circulaires) – les nœuds sont allouées dynamiquement, car ils sont nécessaires, donc, pratiquement, nous pouvons obtenir des listes d'une taille limitée que par la mémoire de programme

Mises en œuvre avec…(2) tableaux dynamiques: – listes sont stockées dans des vecteurs – si, lors de l'ajout d'un nouvel élément, la taille du tableau est dépassée, le tableau est réaffecté (reallocated) – cette mise en œuvre a l'avantage d'une vitesse accrue daccès: les éléments sont dans des emplacements de mémoire successifs, mais… – elle est limitée par la quantité de mémoire contiguë à la disposition du programme

Types de listes (1) listes linéaires liées individuellement (singly- linked linear lists) listes linéaires doublement chaînées (doubly- linked linear lists)

Types de listes (2) listes circulaires liées individuellement (singly-linked circular lists) listes circulaires doublement chaînées (doubly-linked circular lists)

Listes linéaire doublement chaînée– Implementation (mylist.h) #include using namespace std; template struct list_elem { T info; struct list_elem *next, *prev; }; template class LinkedList { public: struct list_elem *pfirst, *plast;

Listes linéaire doublement chaînée– Implementation (mylist.h) void addFirst(T x) { struct list_elem *paux; paux = new struct list_elem ; paux->info = x; paux->prev = NULL; paux->next = pfirst; if (pfirst != NULL) pfirst->prev = paux; pfirst = paux; if (plast==NULL) plast=pfirst; } void addLast(T x) { struct list_elem *paux; paux = new struct list_elem ; paux->info = x; paux->prev = plast; paux->next = NULL; if (plast != NULL) plast->next = paux; plast = paux; if (pfirst == NULL) pfirst = plast; } void removeFirst() { struct list_elem * paux; if (pfirst != NULL) { paux = pfirst->next; if (pfirst == plast) plast = NULL; delete pfirst; pfirst = paux; if (pfirst != NULL) pfirst->prev = NULL; } else cout<<"The list is empty"<<endl; } void removeLast() { struct list_elem *paux; if (plast != NULL) { paux = plast->prev; if (pfirst == plast) pfirst = NULL; delete plast; plast = paux; if (plast != NULL) plast->next = NULL; } else cout<<"The list is empty"<<endl; }

mylist.h struct list_elem * findFirstOccurrence(T x) { struct list_elem *paux; paux = pfirst; while (paux != NULL) { if (paux->info == x) return paux; paux = paux->next; } return NULL; } struct list_elem * findLastOccurrence(T x) { struct list_elem *paux; paux = plast; while (paux != NULL) { if (paux->info == x) return paux; paux = paux->prev; } return NULL; } void removeFirstOccurrence(T x) { struct list_elem *px; px = findFirstOccurrence(x); if (px != NULL) { if (px->prev != NULL) px->prev->next = px->next; if (px->next != NULL) px->next->prev = px->prev; if (px->prev == NULL) // px == pfirst pfirst = px->next; if (px->next == NULL) // px == plast plast = px->prev; delete px; } void removeLastOccurrence(T x) { struct list_elem *px; px = findLastOccurrence(x); if (px != NULL) { if (px->prev != NULL) px->prev->next = px->next; if (px->next != NULL) px->next->prev = px->prev; if (px->prev == NULL) // px == pfirst pfirst = px->next; if (px->next == NULL) // px == plast plast = px->prev; delete px; }

mylist.h int isEmpty() { return (pfirst == NULL); } LinkedList() { pfirst = plast = NULL; } void printList() { struct list_elem *p; p = pfirst; while (p != NULL) { printf("%d\n", p->info); p = p->next; } };

list.cpp #include "mylist.h" int main() { LinkedList l; l.addFirst(89); l.addFirst(34); l.addLast(79); l.addLast(34); l.addFirst(89); l.printList(); l.removeLastOccurrence(89); l.printList(); l.removeLast(); l.removeFirst(); l.printList(); return 0; }

Pille avec listes linéaire chaînée template class Stack { private: LinkedList ll; public: void push(T x) { ll.addLast(x); } T pop() { if (isEmpty()) { fprintf(stderr, "Error The stack is empty!\n"); T x; return x; } T x = ll.plast->info; ll.removeLast(); return x; } T peek() { if (isEmpty()) { fprintf(stderr, "Error The stack is empty!\n"); T x; return x; } return ll.plast->info; } int isEmpty() { return (ll.isEmpty()); } };

File d'attente avec listes linéaire chaînée template class Queue { private: LinkedList ll; public: void enqueue(T x) { ll.addLast(x); } T dequeue() { if (isEmpty()) { fprintf(stderr, "Error The queue is empty!\n"); T x; return x; } T x = ll.pfirst->info; ll.removeFirst(); return x; } T peek() { if (isEmpty()) { fprintf(stderr, "Error The queue is empty!\n"); T x; return x; } return ll.pfirst->info; } int isEmpty() { return (ll.isEmpty()); } };

Maintenir une liste triée template class SortedLinkedList : public LinkedList { public: void addElement(T x) { struct list_elem *p, *paux; p = pfirst; while (p != NULL && p->info < x) p = p->next; if (p == NULL) addLast(x); else { paux = new struct list_elem ; paux->info = x; paux->next = p; paux->prev = p->prev; p->prev = paux; if (p->prev != NULL) p->prev->next = paux; else pfirst = paux; } };

Pour le prochain TP Pensez aux changements que vous avez à faire pour construire une liste linéaire liée individuellement ou une liste circulaire!