24
Programmation avancée Listes Walter Rudametkin [email protected] https://rudametw.github.io/teaching/ Bureau F011 Polytech Lille CM2 1 / 24

Programmation avancée - Listes - GitHub Pages

  • Upload
    others

  • View
    13

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Programmation avancée - Listes - GitHub Pages

Programmation avancée

ListesWalter Rudametkin

[email protected]://rudametw.github.io/teaching/

Bureau F011Polytech Lille

CM2

1 / 24

Page 2: Programmation avancée - Listes - GitHub Pages

Structures de Données

Représentation de collections d’informations enfonction de :I traitements à privilégierI contraintes

I espace disponible / temps d’éxecutionI outils disponibles (selon les différents langages)

I propriétésI relations d’ordre ?I taux de dynamicitéI taille des informations

2 / 24

Page 3: Programmation avancée - Listes - GitHub Pages

Structures de Données

Traitements typiquesI TrisI Recherche d’informations

I Par position: e.g., le kième élémentI Par valeur (associative) : v P C/P(v)

I Mises à jourI AjoutI SuppressionI Modification ñ recherche

3 / 24

Page 4: Programmation avancée - Listes - GitHub Pages

Structures de Données:Classification des SD

SD

Non-linéaireLinéaire

Contiguës Chaînées

Hachées

Arbres Graphes

4 / 24

Page 5: Programmation avancée - Listes - GitHub Pages

Structures de Données:Analyse des besoins

I Identification des informations et de leurscaractéristiques

I Identification des opérations (recherche, ajout,suppression, ...)

I Opérations à privilégier ?I Etude des représentations possibles (structures de

données), avec méthodes de résolution et coûtsassociés

I Choix de la structure en fonction des coûts

5 / 24

Page 6: Programmation avancée - Listes - GitHub Pages

Les listes contiguës

Structures de données contiguësI Autorisent accès direct et calculé

I Déjà vu : tableaux

Représentation

A1 . . . . . . An

0 dernier MAX-1

Espace contigu occupé Zone d’extension contigue

6 / 24

Page 7: Programmation avancée - Listes - GitHub Pages

Les listes contiguës — Définition

Définition du type liste_contiguë

type Liste_contigue = structureespace : Vecteur[MAX] de <T>dernier : Entier

fin

UtilisationI l : Liste_contiguëI l vide ðñ l.dernier = -1

Comment estimer MAX ?

7 / 24

Page 8: Programmation avancée - Listes - GitHub Pages

Les listes contiguës — Exemple

Exemple : affichage des éléments d’une listecontiguë

Action affich(l)D : l : Liste_contiguëL : i : EntierPour i de 0 à l.dernier Faire

ecrire(l.espace[i])Fpour

Faction

8 / 24

Page 9: Programmation avancée - Listes - GitHub Pages

Les listes contiguës — Recherche

Soit N le nombre d’éléments de la liste

Par positionI Accès direct en temps constant : Coût = 1

Par valeurI Non ordonnée ñ recherche séquentielle

I coût min : 1, coût max : NI Ordonnée

I Recherche séquentielle ordonnéeI coût min : 1, coût max : N

I Recherche dichotomiqueI coût min : 1, coût max : log2N

9 / 24

Page 10: Programmation avancée - Listes - GitHub Pages

Les listes contiguës — Ajout

Non ordonnéeI Ajout n’importe où ñ en queueI Coût : 1

OrdonnéeI Insertion à l’indice pñ N´ p décalagesI Coût min : 1, coût max : N

10 / 24

Page 11: Programmation avancée - Listes - GitHub Pages

Les listes contiguës — Suppression

Non ordonnéeI Recherche séquentielle de l’élément à supprimer

(min : 1, max N)I Permutation avec le dernier élément

Ordonnée — suppression à l’indice p

I Recherche dichotomique de l’élémentI Coût min : 1 , coût max : log2N

I N´ p+ 1 décalages (min : 1, max : N)I Coût min : 1, max : N+ log2N

11 / 24

Page 12: Programmation avancée - Listes - GitHub Pages

Les listes chaînées

Représentation disperséeI Éléments rangés n’importe où en mémoire

. . . dans des cellules mémoire géréesdynamiquement. . . repérées par des pointeurs

ChaînéesI Chaque cellule repère la cellule suivanteI Un pointeur sur la première cellule définit la listeI La dernière cellule ne repère aucune cellule :

pointeur NULLI NULL = valeur de la liste vide

12 / 24

Page 13: Programmation avancée - Listes - GitHub Pages

Les listes chaînéesSchématiquement

...

Liste vide l = NULL ou ∅

Déclarationstype Ptcellulle = Pointeur de Cellule

type Cellule = structurevaleur : <T>suivant : Ptcellule

fin

type Liste_chaînée = Ptcellule

l : Liste_chaînée13 / 24

Page 14: Programmation avancée - Listes - GitHub Pages

Les listes chaînées :Notation sur les pointeurs

I pÒ : Cellule ñ Pointeur de CelluleI pÒ‚valeurI pÒ‚suivantI NULLñ pointeur vide

On trouve souvent la notation p->valeur à laplace de pÒ‚valeur

14 / 24

Page 15: Programmation avancée - Listes - GitHub Pages

Les listes chaînées :Gestion dynamique des cellules

I Fonction allouer() : PtcelluleI Fonction qui alloue dynamiquement une celluleI Résultat : pointeur sur la cellule allouée

I Action libérer(p)I Récupère la cellule mémoire pointée par pI Valeur de p ???

15 / 24

Page 16: Programmation avancée - Listes - GitHub Pages

Les listes chaînées — Recherche

SD essentiellement séquentielle ñ parcoursséquentielI Par position

I Parcours du chaînage jusqu’au kième élément(coût = k)

I Par valeurI Séquentielle (coût min : 1, max : N)I Séquentielle ordonnée (coût min : 1, max : N)I Pas de dichotomie possible

16 / 24

Page 17: Programmation avancée - Listes - GitHub Pages

Les listes chaînées — Parcours séquentieltype Ptcellulle = Pointeur de Celluletype Cellule = structure

valeur : <T>suivant : Ptcellule

fintype Liste_chaînée = Ptcellule

1 Action affich (l)2 D : l : Liste_chaînée3 L : p : PtCellule4 p Ð l5 TQ p , NULL Faire6 ecrire(pÒ‚valeur)7 p Ð pÒ‚suivant8 FTQ9 Faction

17 / 24

Page 18: Programmation avancée - Listes - GitHub Pages

Les listes chaînées — Mises à jourI Ajout / Suppression de cellules

I Modification locale du chaînageI Pas besoin de décalage de cellules

I Coût : constant (quelques affectations de pointeurs)I Ajout dans une liste non ordonnée

I N’importe où, e.g en têteI Ajout dans une liste ordonnée

I Coût ???

18 / 24

Page 19: Programmation avancée - Listes - GitHub Pages

Les listes chaînées — Mise à jourAjout dans une liste non-ordonnée

1 Action ajout_tête(l, val)2 D : val : <T>3 D/R : l : Liste_chaînée4 L : p : Ptcellule5

6 p Ð allouer()7 pÒ‚valeur Ð val8 pÒ‚suivant Ð L9 l Ð p

10 Faction

Cas limite : liste vide

19 / 24

Page 20: Programmation avancée - Listes - GitHub Pages

Les listes chaînées — Mises à jourAjout dans une liste ordonnée

Rechercher prec, pointeur précédent tel queI precÒ‚valeur ă val ď precÒ‚suivantÒ‚valeur

20 / 24

Page 21: Programmation avancée - Listes - GitHub Pages

Les listes chaînées — Mise à jourAjout dans une liste ordonnée

1 Action ajout_après ( prec, val)2 D : prec : Ptcellule, val : <T>3 L : p : Ptcellule4

5 p Ð allouer()6 pÒ‚valeur Ð val7 pÒ‚suivant Ð precÒ‚suivant8 precÒ‚suivant Ð p9 Faction

Cas limitesI ajout en queue : OKI ajout en tête : pas de precñ algo ajout_têteI liste vide : idem

21 / 24

Page 22: Programmation avancée - Listes - GitHub Pages

Les listes chaînées — Mises à jourSuppression

Rechercher la cellule précédant celle àsupprimer, soit prec

22 / 24

Page 23: Programmation avancée - Listes - GitHub Pages

Les listes chaînées — Mise à jourSuppression

1 Action sup_après ( prec )2 D : prec : Ptcellule3 L : p : Ptcellule4

5 p Ð precÒ‚suivant6 precÒ‚suivant Ð pÒ‚suivant7 libérer (p)8 Faction

Cas limitesI en queue : okI en tête : pas de prec ñ action sup_tête

23 / 24

Page 24: Programmation avancée - Listes - GitHub Pages

Les listes chaînées — Mise à jourSuppression

1 Action sup_tête ( l )2 D/R : l : Liste_chaînée3 L : p : Ptcellule4

5 p Ð l6 l Ð lÒ‚suivant7 libérer (p)8 Faction

24 / 24