Vous êtes sur la page 1sur 6

Rappels:

5) Files

Rappels: 5) Files 6) Listes chaînées

6) Listes chaînées

Rappels: 5) Files 6) Listes chaînées

Type abstrait de données FILE

(suite)

opérations auxiliaires

opérations auxiliaires

objet devant() : retourne l’objet n devant la file sans le retirer devant(): retourne l’objet n devant la file sans le retirer

entier taille() : retourne le nombre d’objets de la file taille(): retourne le nombre d’objets de la file

booléen estVide() : indique si la file est vide ou non estVide(): indique si la file est vide ou non

Exceptions

Exceptions

ExceptionFileVide si on exécute devant() ou enlever() sur une file vide si on exécute devant() ou enlever() sur une file vide

IFT2015, A2009, Sylvie Hamel Université de Montréal

Files et listes chaînées

2

Type Abstrait de Données FILE (§4.7)

Garde en mémoire des objets arbitrairesType Abstrait de Données FILE (§4.7) Les insertions et suppressions se font dans l’ordre “premier arrivé,

Les insertions et suppressions se font dans l’ordre “premier arrivé, premier sorti (ou servi!)”FILE (§4.7) Garde en mémoire des objets arbitraires Principales opérations:     enqueue(element)

Principales opérations: 

 
 

enqueue(element)

ajouter(objet): insère un objet à la fin de la file : insère un objet à la fin de la file

 

dequeue()

objet enlever() : retire et retourne l’objet au début de la file enlever(): retire et retourne l’objet au début de la file

IFT2015, A2009, Sylvie Hamel Université de Montréal

Files et listes chaînées

1

 

Applications des piles

 

Applications directes 

 

Listes d’attentesdes piles   Applications directes   Accessibilité à des ressources partagées (imprimante)

Accessibilité à des ressources partagées (imprimante)  Applications directes   Listes d’attentes Applications indirectes   Apparaît comme structure

Applications indirectes 

 
Apparaît comme structure de données auxiliaire dans certains algorithmes

Apparaît comme structure de données auxiliaire dans certains algorithmes

IFT2015, A2009, Sylvie Hamel Université de Montréal

Files et listes chaînées

3

Première implémentation d’une file

On utilise une liste de longueur N, d’une façon circulairePremière implémentation d’une file Deux variables gardent en mémoire le devant et le derrière de la

Deux variables gardent en mémoire le devant et le derrière de la fileutilise une liste de longueur N, d’une façon circulaire est l’indice du devant de la file

est l’indice du devant de la filegardent en mémoire le devant et le derrière de la file est l’indice du derrière de

est l’indice du derrière de la filederrière de la file est l’indice du devant de la file f r La position r

f

r

La position r de la liste est toujours videde la file est l’indice du derrière de la file f r Configuration normale Configuration circulaire

Configuration normale

r de la liste est toujours vide Configuration normale Configuration circulaire IFT2015, A2009, Sylvie Hamel

Configuration circulaire

vide Configuration normale Configuration circulaire IFT2015, A2009, Sylvie Hamel Université de Montréal Files

IFT2015, A2009, Sylvie Hamel Université de Montréal

Files et listes chaînées

4

Opérations sur une file (suite)

L’opération ajouter(o) envoie une exception si la liste est pleine ajouter(o) envoie une exception si la liste est pleine

Cette exception est liée à l’implémentationajouter(o) envoie une exception si la liste est pleine Algorithme ajouter ( o ) si taille

Algorithme ajouter(o) si taille() = N ! 1 alors throw ExceptionFilePleine sinon Q[r] " o r " (r + 1) mod N

sinon Q [ r ] " o r " ( r + 1) mod N IFT2015,

IFT2015, A2009, Sylvie Hamel Université de Montréal

Files et listes chaînées

6

Opérations sur une file

On utilise l’opérateur modulo pour calculer la taille de la fileOpérations sur une file Algorithme taille () retourner ( N ! f + r ) mod

Algorithme taille() retourner (N ! f + r) mod N

Algorithme estVide() retourner (f = r)

r ) mod N Algorithme estVide () retourner ( f = r ) IFT2015, A2009, Sylvie

IFT2015, A2009, Sylvie Hamel

Université de Montréal

Files et listes chaînées

5

Opérations sur une file (suite)

L’opération enlever() envoie une exception si la liste est vide enlever() envoie une exception si la liste est vide

Cette exception est intrinsèque au TAD pileenlever() envoie une exception si la liste est vide Algorithme enlever () si estVide () alors

Algorithme enlever() si estVide() alors throw ExceptionFileVide sinon o ! Q[f] f ! (f + 1) mod N retourner o

sinon o ! Q [ f ] f ! ( f + 1) mod N retourner

IFT2015, A2009, Sylvie Hamel Université de Montréal

Files et listes chaînées

7

Implémentation de notre file

Interface JAVA correspondant à notre TAD fileImplémentation de notre file On doit définir une classe ExceptionFileVide Il n’existe pas de classe JAVA

On doit définir une classenotre file Interface JAVA correspondant à notre TAD file ExceptionFileVide Il n’existe pas de classe JAVA

ExceptionFileVide

Il n’existe pas de classe JAVA intrinsèque pour les filesTAD file On doit définir une classe ExceptionFileVide public interface Pile { public int taille() ;

public interface Pile {

public int taille();

public boolean estVide();

public Object devant() throws EmptyQueueException;

public void ajouter(Object o);

public Object enlever() throws EmptyQueueException;

}

IFT2015, A2009, Sylvie Hamel Université de Montréal

Files et listes chaînées

8

Listes chaînées (§3.3)

Une liste simplement chaînée est une structure de données concrète constituée d’une séquence de noeudsListes chaînées (§3.3) Chaque noeud garde en mémoire une référence à un objet et un lien

Chaque noeud garde en mémoire une référence à un objet et un lien (pointeur) vers un autre noeuddonnées concrète constituée d’une séquence de noeuds © 2004, Goodrich,Tamassia IFT2015, A2008, Sylvie Hamel

à un objet et un lien (pointeur) vers un autre noeud © 2004, Goodrich,Tamassia IFT2015, A2008,
à un objet et un lien (pointeur) vers un autre noeud © 2004, Goodrich,Tamassia IFT2015, A2008,

© 2004, Goodrich,Tamassia

IFT2015, A2008, Sylvie Hamel Université de Montréal

Files et listes chaînées

10

Complexité et limitations Si N est la longueur de la liste utilisée dans l’implémentation Complexité
Complexité et limitations
Si N est la longueur de la liste utilisée dans l’implémentation
Complexité en espace: O (N)
Complexité en temps des opérations: O ( 1 )
Limitations
La longueur maximale de la liste doit être défini à priori et ne
peut être changée
Essayer d’ajouter un nouvel élément dans une liste pleine cause
une exception (liée à l’implémentation)
IFT2015, A2009, Sylvie Hamel
Université de Montréal
9
Files et listes chaînées
La classe “Node”
public class
Node
{
// Instance variables:
private Object element;
private Node next;
/** Creates a node with null references to its element and next node. */
public Node()
{
this(null, null);
}
/** Creates a node with the given element and next node. */
public Node(Object e, Node n) {
element = e;
next
=
n;
}
// Accessor methods:
public Object getElement() {
return element;
}
public Node getNext() {
return next;
}
// Modifier methods:
public void setElement(Object newElem) {
element = newElem;
}
public void setNext(Node newNext) {
next = newNext;
© 2004, Goodrich,Tamassia
}
}
IFT2015, A2009, Sylvie Hamel
Université de Montréal
11
Files et listes chaînées

Insérer un élément en tête de liste

Créer un nouveau noeudInsérer un élément en tête de liste Insérer un nouvel élément Faire pointer le nouveau noeud

Créer un nouveau noeud

Insérer un nouvel élémentun élément en tête de liste Créer un nouveau noeud Faire pointer le nouveau noeud sur

Insérer un nouvel élément

Faire pointer le nouveau noeud sur l’ancienne tête de listeliste Créer un nouveau noeud Insérer un nouvel élément La tête devient le nouveau n o

Faire pointer le nouveau noeud sur l’ancienne tête de liste

La tête devient le nouveau n o e u d noeud

La tête devient le nouveau n o e u d © 2005, Drozdek

© 2005, Drozdek

IFT2015, A2009, Sylvie Hamel Université de Montréal

Files et listes chaînées

12

Insérer à la fin de la liste

Créer un nouveau noeudet listes chaînées 12 Insérer à la fin de la liste Insérer un nouvel élément Faire

Créer un nouveau noeud
Créer un nouveau noeud

Insérer un nouvel élément12 Insérer à la fin de la liste Créer un nouveau noeud Faire pointer le nouvel

Insérer un nouvel élément

Faire pointer le nouvel élémentsur null

sur null

Faire pointer le nouvel élément sur null
Faire pointer le nouvel élément sur null

Faire pointer l’ancien dernier élément sur notre nouveau noeudélément Faire pointer le nouvel élément sur null “tail” devient le nouveau noeud © 2005, Drozdek

Faire pointer l’ancien dernier élément sur notre nouveau noeud

“tail” devient le nouveau noeud© 2005, Drozdek

“tail” devient le nouveau noeud © 2005, Drozdek

© 2005, Drozdek

IFT2015, A2009, Sylvie Hamel Université de Montréal

Files et listes chaînées

14

Enlever l’élément en tête de liste

La tête devient le prochain élément de la liste

La tête devient le prochain élément de la liste

Détacher l’ancienne tête de la liste

Détacher l’ancienne tête de la liste

de la liste Détacher l’ancienne tête de la liste © 2005, Drozdek IFT2015, A2009, Sylvie Hamel
de la liste Détacher l’ancienne tête de la liste © 2005, Drozdek IFT2015, A2009, Sylvie Hamel
© 2005, Drozdek
© 2005, Drozdek

IFT2015, A2009, Sylvie Hamel Université de Montréal

Files et listes chaînées

13

Enlever un élément à la fin de la liste

Dans une liste simplement chaînée, on ne peut enlever efficacement un élément à la fin de la listeEnlever un élément à la fin de la liste Cela vient du fait que pour accéder

Cela vient du fait que pour accéder au noeud avant le noeud final, on doit passer à travers toute la liste.enlever efficacement un élément à la fin de la liste © 2005, Drozdek IFT2015, A2009, Sylvie

© 2005, Drozdek
© 2005, Drozdek

IFT2015, A2009, Sylvie Hamel Université de Montréal

Files et listes chaînées

15

Liste doublement chaînée

(§3.4)

Liste doublement chaînée (§3.4) IFT2015, A2009, Sylvie Hamel Université de Montréal Files et listes chaînées 16

IFT2015, A2009, Sylvie Hamel Université de Montréal

Files et listes chaînées

16

Implémenter une file avec une liste chaînée

On peut implémenter une file avec une liste simplement chaînée

implémenter une file avec une liste simplement chaînée L’élément devant la file est gardé en mémoire

L’élément devant la file est gardé en mémoire dans le premier noeud de la listeimplémenter une file avec une liste simplement chaînée L’élément en fin de file est gardé en

L’élément en fin de file est gardé en mémoire dans le dernier noeud de la listeest gardé en mémoire dans le premier noeud de la liste La complexité en espace est

La complexité en espace est O (n), où n est la taille de la file et chaque opération peut s’exécuter en O ( 1)

t noeuds h t ! © 2004, Goodrich,Tamassia éléments
t
noeuds
h
t
!
© 2004, Goodrich,Tamassia
éléments

IFT2015, A2009, Sylvie Hamel Université de Montréal

Files et listes chaînées

18

Implémenter une pile avec une liste chaînée

On peut implémenter une pile avec une liste simplement chaînéeImplémenter une pile avec une liste chaînée L’objet au dessus de la pile est gardé en

implémenter une pile avec une liste simplement chaînée L’objet au dessus de la pile est gardé

L’objet au dessus de la pile est gardé en mémoire dans le premier noeud de la listeimplémenter une pile avec une liste simplement chaînée La complexité en espace est O (n), où

La complexité en espace est O (n), où n est la taille de la pile et chaque opération peut s’exécuter O (n), où n est la taille de la pile et chaque opération peut s’exécuter en O ( 1 )

noeuds t h ! © 2004, Goodrich,Tamassia
noeuds
t
h
!
© 2004, Goodrich,Tamassia

éléments

IFT2015, A2009, Sylvie Hamel Université de Montréal

Files et listes chaînées

17

Type Abstrait de Données QUEUE (“Deque = Double-ended queue”)

Garde en mémoire des objets arbitrairesde Données QUEUE (“Deque = Double-ended queue”) Plus “riche” que la PILE ou la FILE Principales

Plus “riche” que la PILE ou la FILEqueue”) Garde en mémoire des objets arbitraires Principales opérations: ajouterDébut(objet) : insère un

Principales opérations:objets arbitraires Plus “riche” que la PILE ou la FILE ajouterDébut(objet) : insère un objet au

ajouterDébut(objet): insère un objet au début de la queue : insère un objet au début de la queue

ajouterFin(objet): insère un objet à la fin de la queue : insère un objet à la fin de la queue

objet enleverDébut() : retire et retourne l’objet au début de la queue enleverDébut(): retire et retourne l’objet au début de la queue

objet enleverFin() : retire et retourne l’objet à la fin de la queue enleverFin(): retire et retourne l’objet à la fin de la queue

IFT2015, A2009, Sylvie Hamel Université de Montréal

Files et listes chaînées

19

Type abstrait de données QUEUE

opérations auxiliairesType abstrait de données QUEUE (suite) objet devant() : retourne l’objet n devant la file sans

(suite)

objet devant() : retourne l’objet n devant la file sans le retirer devant(): retourne l’objet n devant la file sans le retirer

objet derrière() : retourne l’objet n derrière la file sans le retirer derrière(): retourne l’objet n derrière la file sans le retirer

entier taille() : retourne le nombre d’objets de la file taille(): retourne le nombre d’objets de la file

booléen estVide() : indique si la file est vide ou non estVide(): indique si la file est vide ou non

Exceptionsbooléen estVide() : indique si la file est vide ou non ExceptionQueueVide si on exécute devant(),

estVide() : indique si la file est vide ou non Exceptions ExceptionQueueVide si on exécute devant(),

ExceptionQueueVide si on exécute devant(), derrière() , enleverDébut() ou enleverFin() sur une queue vide

Implémentation, enleverDébut() ou enleverFin() sur une queue vide liste doublement chaînée IFT2015, A2009, Sylvie Hamel

ou enleverFin() sur une queue vide Implémentation liste doublement chaînée IFT2015, A2009, Sylvie Hamel

liste doublement chaînée

IFT2015, A2009, Sylvie Hamel Université de Montréal

Files et listes chaînées

20