[PDF] [PDF] Listes et itérateurs - Algo Prog Objet Python





Previous PDF Next PDF



Listes doublement chaînées

2 Affichage inversé d'une liste doublement chaînée. Pour la version itérative (Algorithme 3) l'idée de l'algorithme est de la parcourir jusqu'à la fin avec.



Chapitre 10 Listes chaînées

liste chainée. 24. 8. 56. Nil. L'algorithme est donné sous forme d'une procédure qui Afficher les éléments d'une liste doublement chaînée. Il est possible de ...



Exercices des chapitres 9 10 et 11 Sommaire

voir ci–après */ si precedent ≠ Nil alors. /* la position existe */. 1 allouer(p) ... Pour insérer un élément dans une liste doublement chaînée il faut :.



Listes doublement chaˆınées

afficher. 3. Énoncer les invariants de notre structure de liste chaınée. Regarder notamment les aspects suivants : — définition ou non-définition des champs 



Algorithmique et structures de données II

Les listes doublement chaînées: Dans ces listes les éléments sont chaînées Affichage d'une liste chaînée: Procédure AffichageListe(L:Liste). Variables: P ...



Structures de données IMA S6 Listes avec sentinelle

Listes doublement chaînées. Structure. Listes doublement chaînées. Liste doublement chaînée = on maintient : un pointeur vers la cellule suivante un pointeur 



LIFAP3 : Algorithmique et programmation procédurale

Construire une classe implémentant les listes doublement chaînées non circulaires incluant : • un constructeur et un destructeur.



TP12 : Listes doublement chaînées et polynômes

La structure struct monome_elem sera utilisée pour représenter un terme d'un polynôme. Un polynôme sera codé avec une liste doublement chaînée. Le type polynome 



LIFAPSD : Algorithmique Programmation et Structures de données

affichage de la liste (de droite à gauche et de gauche Implémentez la procédure de tri d'une liste doublement chaînée



Conception de structures de données

Listes doublement chaınées. Files. Simplement chaˆınée vs. doublement chaˆınée La taille est inconnue `a priori ;. Une liste doublement chaˆınée est ...



[PDF] Listes doublement chaînées - LaBRI

2 Affichage inversé d'une liste doublement chaînée Pour la version itérative (Algorithme 3) l'idée de l'algorithme est de la parcourir jusqu'à la fin avec



[PDF] Listes doublement chainées - ENSIIE

Année 2008-2009 Listes doublement chainées Nous avons vu en cours TD et TP que les listes étaient parfois difficiles `a manipuler parce que certains



[PDF] Chapitre 10 Listes chaînées - MIAGE de Nantes

Liste doublement chaînée où chaque élément dispose non plus d'un mais de deux pointeurs afficher la valeur contenue à l'adresse pointée par P */



[PDF] TP6 : Liste doublement chaînée - CNRS

nouvelle implémentation de liste chaînée différente de celle vue en cours et en a affichage de la liste (de droite à gauche et de gauche à droite)



[PDF] Listes et itérateurs - Algo Prog Objet Python

Liste simplement chaînée : un seul pointeur vers l'élément suivant • Liste doublement chaînée : pointeurs vers précédent et suivant 



[PDF] 5) Files Rappels: 6) Listes chaînées Type Abstrait de Données FILE

Files et listes chaînées Garde en mémoire des objets arbitraires Les insertions et suppressions Liste doublement chaînée 16 Files et listes chaînées



[PDF] TP12 : Listes doublement chaînées et polynômes - Cedric/CNAM

La structure struct monome_elem sera utilisée pour représenter un terme d'un polynôme Un polynôme sera codé avec une liste doublement chaînée Le type polynome 



[PDF] Pratique de la programmation et projet TP 7 : Listes (simplement

Liste doublement cha?née : en plus du champ successeur chaque élément contient un champ prédécesseur qui est un pointeur sur l'élément précédent dans la 



[PDF] TD2 : Listes doublement chaˆ?nées et files

TD2 : Listes doublement chaˆ?nées et files Exercice 1 La structure suivante code des listes doublement cha?nées avec maillon void afficher(LISTE l)

Andrea G. B. Tettamanzi, 20171AlgorithmiqueAlgorithmique Programmation ObjetProgrammation ObjetPythonPython

Andrea G. B. Tettamanzi

Université de Nice Sophia Antipolis

Département Informatique

andrea.tettamanzi@unice.fr

Andrea G. B. Tettamanzi, 20172CM - Séance 7

Listes et itérateurs

Andrea G. B. Tettamanzi, 20173Plan

•Indirection et pointeurs •Listes simplement chaînées •Listes doublement chaînées •Listes en Python •Itérateurs

Andrea G. B. Tettamanzi, 20174Introduction

•Les tableaux sont très pratiques, mais ils ont un gros défaut •Insertion et élimination d'éléments sont des opérations O(n) ! •Il nous faut une structure de données pour laquelle ces opérations soient plus performantes •On peut obtenir une telle structure en utilisant l'indirection

Andrea G. B. Tettamanzi, 20175Indirection

•L'idée de l'indirection est d'utiliser la valeur d'une variable pour indiquer la position d'une autre variable (dans un tableau ou en mémoire) •Nous avons déjà rencontré cette idée avec les variables index : 3i 532
7 11T

Andrea G. B. Tettamanzi, 20176Pointeurs

•Un pointeur est un type de données dont la valeur fait référence (référence) directement à (pointe vers) une autre valeur. •Un pointeur référence une valeur située quelque part d'autre en mémoire, habituellement en utilisant son adresse •La mémoire est un grand tableau, donc un pointeur est une sorte de variable index de la mémoire •Obtenir la valeur vers laquelle un pointeur pointe est appelé " déréférencer le pointeur ». •Un pointeur qui ne pointe vers aucune valeur aura la valeur nil

Andrea G. B. Tettamanzi, 20177Liste chaînée

•Une liste chaînée désigne une structure de données représentant une collection ordonnée et de taille arbitraire d'éléments. •L'accès aux éléments d'une liste se fait de manière séquentielle •chaque élément permet l'accès au suivant (contrairement au cas du tableau dans lequel l'accès se fait de manière absolue, par adressage direct de chaque cellule dudit tableau). •Un élément contient un accès vers une donnée •Le principe de la liste chaînée est que chaque élément possède, en plus de la donnée, des pointeurs vers les éléments qui lui sont logiquement adjacents dans la liste. •Liste simplement chaînée : un seul pointeur vers l'élément suivant •Liste doublement chaînée : pointeurs vers précédent et suivant Andrea G. B. Tettamanzi, 20178Liste (simplement) chaînée lst 532
7

Andrea G. B. Tettamanzi, 20179Liste chaînée

•Étant donnée une liste L -L.premier désigne le premier élément de la liste -nil désigne l'absence d'élément •Liste simplement chaînée : -elt.donnée désigne la donnée associée à l'élément elt -elt.suivant désigne l'élément suivant de la liste •Liste doublement chaînée : -elt.précédent désigne l'élément précédent de la liste Andrea G. B. Tettamanzi, 201710Remarque historique •La représentation de listes chaînées à l'aide du diagramme avec une flèche vers le suivant a été proposé par Newell and Shaw dans l'article "Programming the Logic Theory Machine" Proc.

WJCC, February 1957.

•Newell et Simon ont obtenu l'ACM Turing Award en 1975 pour avoir "made basic contributions to artificial intelligence, the psychology of human cognition, and list processing". Andrea G. B. Tettamanzi, 201711Liste : opérations •Trois opérations principales -Parcours de la liste -Ajout d'un élément -Suppression d'un élément •A partir de là, d'autres opérations vont être obtenues : -recherche d'une donnée, -Remplacement, -concaténation de liste, -fusion de listes, -etc.

Andrea G. B. Tettamanzi, 201712Liste vs. Tableau

•Le principal avantage des listes sur les tableaux -L'ordre des éléments de la liste peut être différent de leur ordre en mémoire. -Les listes chaînées vont permettre l'ajout ou la suppression d'un élément en n'importe quel endroit de la liste en temps constant. •En revanche, certaines opérations peuvent devenir coûteuses, comme la recherche d'un élément contenant une certaine donnée. -Pas de recherche dichotomique dans une liste : on ne peut pas atteindre le ième élément sans parcourir !

Andrea G. B. Tettamanzi, 201713Liste : parcours

entier L.nombreElements() compte ← 0; elt ← L.premier tant que elt ≠ nil compte ← compte + 1 elt ← elt.suivant renvoyer compte Andrea G. B. Tettamanzi, 201714Liste : ajout d'un élément •On ajoute un élément elt au début de la liste. •On suppose qu'il n'est pas déjà dans la liste (sinon que se passe-t-il ?) •Principes : -Le premier de la liste deviendra elt -Mais où est le premier ? Il devient le suivant de elt -Attention à l'ordre de mise à jour ! On ne doit pas perdre le premier. Donc •Le suivant de elt est mis à jour •Puis le premier de la liste Andrea G. B. Tettamanzi, 201715Liste : ajout d'un élément

L.ajouteAuDebut(elt)

# elt n'est pas dans L elt.suivant ← L.premier

L.premier ← elt

Andrea G. B. Tettamanzi, 201716Liste : insertion d'un élément lst 732
115p
elt Andrea G. B. Tettamanzi, 201717Liste : insertion d'un élément

L.insèreAprès(elt, p)

# elt n'est pas dans L # p est dans L elt.suivant ← p.suivant p.suivant ← elt Andrea G. B. Tettamanzi, 201718Liste : suppression d'un élément lst 732
115p
elt Andrea G. B. Tettamanzi, 201719Liste : suppression d'un élément

L.supprime(elt, p)

# elt est dans L, # p est son précédent si elt = L.premier

L.premier ← elt.suivant

sinon si elt = p.suivant p.suivant ← elt.suivant Andrea G. B. Tettamanzi, 201720Liste doublement chaînée lst 532
7 Andrea G. B. Tettamanzi, 201721Liste doublement chaînée •Les opérations principales changent pour prendre en compte le fait que chaque élément pointe au précédent ainsi qu'au suivant •Parcours -On peut parcourir la liste en avant et en arrière •Insertion et suppression -Il faut modifier aussi les pointeurs au précédent Andrea G. B. Tettamanzi, 201722Liste double : ajout d'un élément

L.ajouteAuDebut(elt)

# elt n'est pas dans L elt.suivant ← L.premier

Si L.premier ≠ nil

L.premier.précédent ← elt

elt.précédent ← nil

L.premier ← elt

Andrea G. B. Tettamanzi, 201723Liste double : insertion d'un élément

L.insèreAprès(elt, p)

# elt n'est pas dans L # p est dans L elt.suivant ← p.suivant elt.précédent ← p si p.suivant ≠ nil p.suivant.précédent ← elt p.suivant ← elt Andrea G. B. Tettamanzi, 201724Liste double : suppression d'un élément

L.supprime(elt) # elt est dans L

s ← elt.suivant; p ← elt.précédent si p = nil

L.premier ← s

sinon p.suivant ← s si s = nil

L.dernier ← p

sinon s.précédent ← p Andrea G. B. Tettamanzi, 201725Listes simplement chaînées en Python •Ce que Python appelle " liste » c'est en effet un tableau ! •Comment est-ce qu'on peut réaliser des listes chaînées en

Python, alors ?

•Il y a deux manières possibles -En utilisant les tuples et un style de programmation fonctionnel -En utilisant les objets et un style de programmation orienté objet Andrea G. B. Tettamanzi, 201726Listes en Python : style fonctionnel •La brique de base pour construire une liste est une tuple contenant deux éléments : -La tête de liste (ce qu'on appelle CAR en Lisp) -La queue de liste (ce qu'on appelle CDR en Lisp) •La liste vide est représentée par None. def mklist(*args): result = None for element in reversed(args): result = (element, result) return resultmklist = lambda *args: reduce(lambda lst, el: cons(el, lst), reversed(args), None) Andrea G. B. Tettamanzi, 201727Listes en Python : style fonctionnel cons = lambda el, lst: (el, lst) car = lambda lst: lst[0] if lst else lst cdr = lambda lst: lst[1] if lst else lst nth = lambda n, lst: nth(n-1, cdr(lst)) if n > 0 else car(lst) length = lambda lst, count=0: length(cdr(lst), count+1) if lst else count Andrea G. B. Tettamanzi, 201728Listes en Python : style orienté objet class ListNode: def __init__(self, cargo=None, next=None): self.car = cargo self.cdr = next def __str__(self): return str(self.car) + "," + str(self.cdr)

Andrea G. B. Tettamanzi, 201729Itérateur

•Un itérateur est un objet qui permet de parcourir tous les éléments contenus dans un autre objet, le plus souvent un conteneur (liste, arbre, etc). Un synonyme d'itérateur est curseur, notamment dans le contexte des bases de données. •Un itérateur dispose essentiellement de deux primitives : -accéder à l'élément en cours dans le conteneur, -se déplacer vers l'élément suivant. •Il faut aussi pouvoir créer un itérateur sur le premier élément ; ainsi que déterminer à tout moment si l'itérateur a épuisé la totalité des éléments du conteneur. Diverses implémentations peuvent également offrir des comportements supplémentaires.

Andrea G. B. Tettamanzi, 201730Itérateur

•Le but d'un itérateur -permettre à son utilisateur de parcourir le conteneur, c'est-à- dire d'accéder séquentiellement à tous ses éléments pour leur appliquer un traitement, -isoler l'utilisateur de la structure interne du conteneur, potentiellement complexe. •Avantage : -le conteneur peut stocker les éléments de la façon qu'il veut, tout en permettant à l'utilisateur de le traiter comme une simple liste d'éléments. -Le plus souvent l'itérateur est conçu en même temps que la classe-conteneur qu'il devra parcourir, et ce sera le conteneur lui-même qui créera et distribuera les itérateurs pour accéder

à ses éléments

Andrea G. B. Tettamanzi, 201731Itérateur : avantages •On utilise souvent un index dans une simple boucle, pour accéder séquentiellement à tous les éléments, notamment d'un tableau; l'utilisation des itérateurs a certains avantages: •Un simple compteur dans une boucle n'est pas adapté à toutes les structures de données, en particulier -celles qui n'ont pas de méthode d'accès à un élément quelconque -celles dont l'accès à un élément quelconque est très lent (c'est le cas des listes chaînées et des arbres). Andrea G. B. Tettamanzi, 201732Itérateur : avantages •Les itérateurs fournissent un moyen cohérent d'itérer sur toutes sortes de structures de données, rendant ainsi le code client plus lisible, réutilisable, et robuste même en cas de changement dans l'organisation de la structure de données. •Un itérateur peut implanter des restrictions additionnelles sur l'accès aux éléments, par exemple pour empêcher qu'un élément soit " sauté », ou qu'un même élément soit visité deux fois.

Andrea G. B. Tettamanzi, 201733Itérateur

•Un itérateur peut dans certains cas permettre que le conteneur soit modifié, sans être invalidé pour autant. •Par exemple, après qu'un itérateur s'est positionné derrière le premier élément, il est possible d'insérer d'autres éléments au début du conteneur avec des résultats prévisibles. •Avec un index on aurait plus de problèmes, parce que la valeur de l'index devrait elle aussi être modifiée en conséquence. •Important : il est indispensable de bien consulter la documentation d'un itérateur pour savoir dans quels cas il est invalidé ou non.

Andrea G. B. Tettamanzi, 201734Itérateur

•Cela permet de faire des algorithmes sans connaître la structure de données sous-jacente. •On recherche un plus court chemin dans un graphe : -On ne sait pas comment le graphe est représenté. -Cela ne nous empêche pas de faire un algorithme efficace Andrea G. B. Tettamanzi, 201735Itérateurs en Python •Objets itérables -Listes, chaînes de caractères, tuples, dictionnaires et fichiers -Objet des classes ayant une méthode __iter__() ou __getitem()__. •Quand la fonction primitive iter() est appliquée à un objet itérable, elle renvoie un itérateur •L'instruction for applique iter() implicitement, en coulisse •Un itérateur est un objet qui expose la méthode __next__() •La fonction primitive next() appliquée à un itérateur renvoie le prochain élément ou lance l'exception StopIteration si l'itérateur est épuisé.

Andrea G. B. Tettamanzi, 201736Générateurs

•Les générateurs sont des fonctions spéciales qui renvoient un itérateur •Elles sont écrites comme des fonctions normales, sauf qu'elles utilisent l'instruction yield pour renvoyer le prochain élément •Un générateur simple peut être codé comme expression, en utilisant la syntaxe : expression for variables in objet_itérable •Exemples : def reverse(data): for index in range(len(data)-1, -1, -1): yield data[index] sum(i*i for i in range(10)) Andrea G. B. Tettamanzi, 201737Merci de votre attentionquotesdbs_dbs14.pdfusesText_20
[PDF] affinity analysis

[PDF] affirmation de soi définition psychologie

[PDF] affirmation de soi exemple

[PDF] affirmation de soi exercices pratiques

[PDF] affirmation de soi pdf

[PDF] affirmative vote vs majority vote

[PDF] affordable housing

[PDF] affordable housing experts

[PDF] affordable housing for ssdi recipients

[PDF] affordable housing in india

[PDF] afm 1 1 1964

[PDF] afqt predictor test scores

[PDF] africa age demographics

[PDF] africa population 2050

[PDF] africa population age distribution