0% ont trouvé ce document utile (0 vote)
74 vues21 pages

Structures de Données en BTS Logiciel

Le document présente les structures de données, en mettant l'accent sur leur importance pour l'organisation et la gestion des données dans les programmes. Il décrit plusieurs types de structures, notamment les tableaux, les listes chaînées, les piles, les files et les tables de hachage, ainsi que leurs caractéristiques et opérations. Les listes chaînées sont détaillées avec leur définition, représentation, implémentation et opérations, soulignant leurs avantages par rapport aux tableaux.

Transféré par

juliegrace782
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
74 vues21 pages

Structures de Données en BTS Logiciel

Le document présente les structures de données, en mettant l'accent sur leur importance pour l'organisation et la gestion des données dans les programmes. Il décrit plusieurs types de structures, notamment les tableaux, les listes chaînées, les piles, les files et les tables de hachage, ainsi que leurs caractéristiques et opérations. Les listes chaînées sont détaillées avec leur définition, représentation, implémentation et opérations, soulignant leurs avantages par rapport aux tableaux.

Transféré par

juliegrace782
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

STRUCTURES DE DONNEES 2

BTS GENIE LOGICIEL, 2ème année

CHAPITRE 1 GENERALITES

Introduction
La façon d’organiser les données traitées par un programme impacte grandement sur la
complexité et les performances de ce dernier. La plupart des bons algorithmes utilisent des
méthodes astucieuses pour organiser les données. Ces techniques sont regroupées sous le
vocable « structures de données ».

Une structure de données est l'implémentation explicite d'un ensemble organisé d'objets,
avec la réalisation des opérations d'accès, de construction et de modification afférentes.

On regroupe les structures de données en plusieurs catégories : les structures de données


séquentielles, les structures linéaires, les tables, les arbres et les graphes.

En fonction de la méthode de gestion de la mémoire utilisée, on distingue les structures de


données statiques des structures de données dynamiques. Ces dernières permettent une
gestion plus fine de la mémoire en limitant les gaspillages de mémoire et en facilitant
l’évolution de la taille des données.

Le choix de la bonne structure de données dépend surtout du problème et des algorithmes à


développer. De plus, on utilise généralement une combinaison de plusieurs types de
structures de données pour adresser efficacement certains problèmes.

M. KENFACK, Support de cours « Structures de données 2 », Page 1 sur 21


1. Structures de données linéaires
Les structures de données linéaires sont des structures qui induisent une notion de
séquence entre les éléments les composant (1er, 2ème, 3ème, suivant, dernier…).

Parmi les structures de données linéaires on retrouve :

• les tableaux,
• les listes chaînées, les piles, les files.

1.1. Les tableaux


Les éléments d’un tableau sont de même type et sont placés de façon contigüe en mémoire.

Pour créer un tableau, à 1 ou 2 dimensions, il faut connaître sa taille qui ne pourra être
modifiée au cours du programme, et lui associer un indice pour parcourir ses éléments.
Pour les tableaux, la séquence correspond aux numéros des cases du tableau. On
accède à un élément du tableau directement grâce à son indice.

Soit le tableau à 1 dimension suivant nommé Tablo : 12 14 10 24

Pour atteindre la troisième case du tableau il suffit d'écrire Tablo[3] qui contient 10, si les
valeurs de l’indice commencent à 1.

La structure de type tableau pose des problèmes pour insérer ou supprimer un


élément car ces actions nécessitent des décalages du contenu des cases du tableau,
ce qui peut prendre beaucoup de temps dans l'exécution d'un programme.

Ce type de stockage peut donc être coûteux en temps d'exécution. Il existe une autre
structure, appelée liste chaînée, qui permet plus aisément d'insérer et de supprimer des
valeurs dans une liste linéaire d'éléments.

1.2. Les listes chaînées


Une liste chaînée est une structure linéaire qui n'a pas de dimension fixe à sa création.
Ses éléments de même type sont éparpillés dans la mémoire et reliés entre eux par des
pointeurs. Sa dimension peut être modifiée selon la place disponible en mémoire. La liste
est accessible uniquement depuis son premier élément.

Pour les listes chaînées la séquence est mise en œuvre par le pointeur porté par chaque
élément qui indique l'emplacement de l'élément suivant. Le dernier élément de la liste ne
pointe sur rien (Nil).

On accède à un élément de la liste en parcourant les éléments grâce à leurs pointeurs.

Soit la liste chaînée suivante (@ indique que le nombre qui le suit représente une adresse)

M. KENFACK, Support de cours « Structures de données 2 », Page 2 sur 21


Pour accéder au troisième élément de la liste il faut toujours débuter la lecture de la liste par
son premier élément dans le pointeur duquel est indiqué la position du deuxième
élément. Dans le pointeur du deuxième élément de la liste on trouve la position du troisième
élément…

Pour ajouter un élément il suffit d'allouer une place en mémoire et de mettre à jour les
pointeurs des éléments.

Il existe différents types de listes chaînées :

• Liste chaînée simple constituée d'éléments reliés entre eux par des pointeurs.
• Liste doublement chaînée
• Liste circulaire

Ces différents types peuvent être mixés selon les besoins.

On utilise une liste chaînée plutôt qu'un tableau lorsque l'on doit traiter des objets
représentés par des suites sur lesquelles on doit effectuer de nombreuses suppressions et
de nombreux ajouts. Les manipulations sont alors plus rapides qu'avec des tableaux.

1.3. Les piles et les files


Les files et les piles sont des séquences particulières qui permettent l'ajout et la suppression
d'éléments uniquement à une des deux extrémités de la liste.

La pile est une structure de liste similaire à une pile d'assiettes où l'on pose et l'on prend au
sommet.

La file est une structure de liste similaire à une file d'attente à une caisse, le premier client
entré dans la file est le premier sorti de celle-ci.

2. les tables de hachage


Fonctionnement d’une table de hachage

Une table de hachage est une structure de données qui permet une association (clé,
élément), où chaque élément est associé à une clé et ou chaque clé correspond à un seul
élément.

M. KENFACK, Support de cours « Structures de données 2 », Page 3 sur 21


Elle consiste en un tableau (la table de hachage) dont les cases sont appelées alvéoles et
une fonction (la fonction de hachage). La fonction de hachage associe à une clé une valeur
de hachage. Elle fait donc correspondre la clé d'un élément à une valeur qui est utilisée
comme index dans la table de hachage pour cet élément.

Le but de cette structure de données est d'accéder le plus rapidement possible à un élément
à partir de sa clé.

Les opérations permises par une table de hachage sont les suivantes :

• insère(H, élt, clé) : insère dans la table de hachage H un élément élt dont la clef est
clé.
• élément recherche(H, clé) : recherche dans la table de hachage H si un élément est
associé à la clef clé et renvoie cet élément.
• appartient(H, clé) : recherche dans la table de hachage H si un élément est associé à
la clef clé.

Lorsque deux clés ont la même valeur de hachage, on dit qu'on a une collision. Ces clés ne
peuvent être stockées à la même position, on doit alors employer une stratégie de résolution
des collisions. Il existe deux méthodes principales pour gérer le problème des collisions : le
chaînage et l’adressage ouvert.

M. KENFACK, Support de cours « Structures de données 2 », Page 4 sur 21


CHAPITRE 2 LISTES CHAINEES

I- Définition et représentation d’une liste chainée


1. Définition
Une liste chainée est simplement une liste d'objets de même type dans laquelle chaque
élément contient :

- des informations relatives au fonctionnement de l'application, par exemple des noms et


prénoms de personnes avec adresses et numéros de téléphone pour un carnet d'adresse ;
l'adresse de l'élément suivant.

C'est ce lien via l'adresse de l'élément suivant contenue dans l'élément précédent qui fait la
"chaine" et permet de retrouver chaque élément de la liste.

2. Représentation

Typiquement un élément d'une liste chainée, appelé aussi une cellule ou un maillon, est
défini par un enregistrement (structure). Cet enregistrement contient les informations en
relation avec les objectifs de l'application et un pointeur sur l’enregistrement suivant de
même type :

Element = Enregistrement

info : Type de l’information traitée ;

suivant : ^Element ;

FinEnregistrement

Remarque : On utilise aussi le terme de structures récursives pour désigner les structures
linéaires (listes chainées, piles, files) et les arbres.

M. KENFACK, Support de cours « Structures de données 2 », Page 5 sur 21


3. Implémentation
On distingue deux implémentations possibles des listes chainées : l’allocation dynamique de
la mémoire et l’allocation contiguë de la mémoire.

a) Allocation dynamique

Les éléments de la liste sont dispersés en mémoire centrale, l'espace est réservé au fur et à
mesure de la demande grâce aux primitives de gestion de la mémoire (Allouer et Libérer).

b) Allocation contiguë

Les éléments de la liste sont contigus soit dans un tableau en mémoire centrale, soit sur
fichier en accès direct et dont la taille maximum est spécifiée et contrôlée dans le programme.

Pour une allocation contiguë de mémoire les pointeurs sont des entiers qui correspondent à
des indices de tableau ou des positions dans un fichier. La structure de données doit préciser
la taille maximum de la liste et définir deux valeurs :

- une valeur de fin de liste

- une valeur qui indique si une position est libre ou pas

4. Opérations sur les listes


Trois opérations principales sont possibles sur les listes :

• Parcours de la liste
• Ajout d’un élément
• Suppression d’un élément
• Savoir si une liste est vide
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.

Exercice : Donner les avantages et les limites des listes chainées par rapport aux tableaux.

M. KENFACK, Support de cours « Structures de données 2 », Page 6 sur 21


II- Liste chainée simple
Dans une liste simple,

• Chaque cellule contient en plus des données, un pointeur vers l’élément suivant de la liste.
Le pointeur du dernier élément de la liste a la valeur NIL.
• Une variable, appelée tête ou liste, contient l'adresse du premier élément de la liste
chaînée.
• Lorsque la liste est vide, la tête contient la valeur NIL.
• L’adresse du premier élément défini la liste.

Structures de données utilisées dans cette section

Type ListeNombre = Enregistrement

info : entier ;

suivant : ^ListeNombre

FinEnregistrement

Variable liste : ^ListeNombre ; // déclaration d’une variable liste chainée de nombres

1. Liste Vide
Principe : Une liste est vide si sa tête contient la valeur NIL.

fonction liste_vide(liste : ^ListeNombre) : booleen

Debut

Si(liste = NIL) Alors

retourner Vrai;

Sinon

M. KENFACK, Support de cours « Structures de données 2 », Page 7 sur 21


retourner Faux ;

FinSI

Fin

2. Parcourt d’une liste


Pour parcourir une liste chainée, il suffit avec un pointeur de prendre successivement
l'adresse de chaque élément de la liste. Au départ le pointeur prend l'adresse du premier
élément, ensuite il prend l'adresse du suivant et ainsi de suite.

procedure imprimer_liste(liste : ^ListeNombre)

Variable p : ^ListeNombre ;

Debut

P  liste ;

Tantque (p != NIL) Faire

Ecrire (p^.info) ;

P  p^.suivant ;

FinTantque

Fin

3. Ajout d’un élément dans la liste

a) Ajout d’un nouvel élément en tête de liste

Etape 1 Commencer par créer une nouvelle cellule et initialiser son champ info.

Etape 2 : Ensuite, le nouvel élément est ajouté au début de la liste : son suivant pointe sur
le premier élément de la liste.

M. KENFACK, Support de cours « Structures de données 2 », Page 8 sur 21


Etape 3 : Enfin, le pointeur "premier" qui donne l'adresse de la liste, ne contient plus
l'adresse du début qui est maintenant dans nouveau, premier doit donc prendre cette
adresse :

Procedure ajout_en_tete(liste : ^ListeNombre, val : entier)

Variable nouveau : ^ListeNombre ;

Debut

Alouer(nouveau) ;

nouveau^.info  val ;

nouveau^.suivant  liste ;

liste  nouveau ;

Fin

b) Ajout d’un nouvel élément en fin de liste

Etape 1 Commencer par créer une nouvelle cellule et initialiser son champ info.

Etape 2. Ensuite deux cas se présentent : la liste est vide ou pas.

 Si la liste est vide le premier prend la valeur du nouveau :


 Sinon se positionner sur le dernier élément de la liste et ajouter le « nouveau » à la
suite.

procedure ajout_en_fin(liste : ^ListeNombre, val : entier)

variable dernier, nouveau : ^ListeNombre ;

Debut

Alouer(nouveau) ;

nouveau^.info  val ;

nouveau^.suivant  NIL

si(liste = NIL) alors

liste  nouveau ;

sinon

dernier  liste ;

M. KENFACK, Support de cours « Structures de données 2 », Page 9 sur 21


// voyez comme on recherche le dernier élément de liste

tanque (dernier^.suivant != NIL) faire

dernier  dernier^.suivant ; // on incrémente dernier

fintantque

dernier^.suivant  nouveau ;

finsi

Fin

4. Suppression
Nous allons distinguer ici la suppression du premier élément de la liste et la suppression du
dernier élément de la liste.

a) Suppression en tête de liste

On suppose dans les étapes suivantes que la liste n’est pas vide.

Etape 1 : on initialise un pointeur « p » sur le premier élément de la liste

Etape 2 : on fait pointer le premier élément de la liste sur son suivant

Etape 3 : On libère l’emplacement mémoire de p.

procedure supprimer_en_tete(liste : ^ListeNombre)

Variable p : ^ListeNombre ;

Debut

Si (liste != NIL) Alors

P  liste ; // etape1

liste  liste^.suivant ; // etape2

Liberer(p) ; //// etape 3

FinSi

Fin

b) Suppression en fin de liste

On suppose dans les étapes suivantes que la liste n’est pas vide.

On distingue deux cas de figure :

M. KENFACK, Support de cours « Structures de données 2 », Page 10 sur 21


Cas ou la liste a un seul élément :

 Etape 1 : on supprime la zone pointée par le premier élément de la liste  Etape


2 : le premier élément prend la valeur NIL.

Cas ou la liste a plus d’un élément :

 Etape 1 : on trouve l’avant dernier élément de la liste


 Etape 2 : on l’utilise pour supprimer le dernier
 Etape 3 : on met le suivant de l’avant dernier à NIL

procedure supprimer_en_fin(liste : ^ListeNombre)

Variable avantDer : ^ListeNombre ;

Debut

si(liste != NIL) Alors

si( liste^.suivant = NIL) Alors // cas où il y a un seul élément dans la liste

Liberer(liste) ;

liste  NIL ;

sinon // cas où il y a plus d’un élément dans la liste

avantDer  liste;

// ici on recherche l’avant dernier élément de la liste

Tantque (avantDer^.suivant^.suivant != NIL) Faire

avantDer  avantDer^.suivant ;

Fintantque

Liberer(avantDer^.suivant) ;

avantDer^.suivant  NIL ;

finsi

FinSi

Fin

5. Création d’une liste


Dans ce qui suit, nous allons créer une liste chainée d’entiers à partir des données fournit
par l’utilisateur. Le principe général reste le même, quel que soit la source des données
(tableau, fichiers, …)

On peut créer une liste chainée par ajout de nouveaux éléments en tête ou en fin de liste.
M. KENFACK, Support de cours « Structures de données 2 », Page 11 sur 21
a) Création d’une liste en faisant des insertions en tête
Procedure creation_1(liste : ^ListeNombre)

Variable nouveau : ^ListeNombre ;

Continuer : entier ;

Debut

Continuer = 1 ;

Tantque (continuer = 1) Faire

Alouer(nouveau) ;

Ecrire(‘’Entrer un entier : ‘’) ;

Lire(nouveau^.info) ;

// insertion en tête de la liste

nouveau^.suivant  liste ;

liste  nouveau ;

Ecrire(‘voulez vous continuer ? 1 = oui, o = non ‘’) ;

Lire(continuer) ;

FinTantque

Fin

b) Création d’une liste en faisant des insertions en fin

Procedure creation_2(liste : ^ListeNombre)

Variable nouveau, dernier : ^ListeNombre ;

Continuer : entier ;

Debut

continuer = 1 ;

Tantque (continuer = 1) Faire

Alouer(nouveau) ;

Ecrire(‘’Entrer un entier : ‘’) ;

Lire(nouveau^.info) ;

M. KENFACK, Support de cours « Structures de données 2 », Page 12 sur 21


// insertion en fin de la liste

si(premier = NIL) alors

liste  nouveau ;

sinon

dernier  liste ;

// recherche du dernier élément de la liste

tantque (dernier^.suivant != NIL) faire

dernier  dernier^.suivant ; // on incrémente dernier

fintantque

dernier^.suivant  nouveau ;

finsi

Ecrire(‘voulez vous continuer ? 1 = oui, o = non ‘’) ;

Lire(continuer) ;

FinTantque

Fin

6) Exercice
En considérant la liste chainée d’entiers ci-dessus, écrire les sous programmes suivant :

a) Fonction qui retourne la taille de la liste (nombre d’éléments de la liste)


b) Fonction de recherche booléenne d’un entier donné dans la liste.
c) Rechercher et afficher tous les nombre pairs contenus dans cette liste
d) Rechercher et afficher le plus petit et le plus grand nombre de la liste
e) Procédure qui augmente de « 1 » tous les multiples de 5 présents dans la liste.
f) Procédure qui supprime l’entier « 10 » s’il est dans la liste
g) Procédure qui supprimer la première occurrence d’un nombre donné de la liste
h) Procédure qui ajoute une nouvelle valeur après la première occurrence d’un nombre
donné de la liste.
i) Procédure qui insère un nouveau nombre à la position « k » de la liste.
j) Procédure qui supprime le nombre à la position « k » de la liste.

NB : pour chacune des questions ci-dessus, proposer une version itérative et une version
récursive.

M. KENFACK, Support de cours « Structures de données 2 », Page 13 sur 21


III- Liste Circulaire
Une liste chaînée est circulaire lorsque le champ suivant du dernier élément contient
l'adresse du premier.

Exemples :

Exemple de liste simplement chainée circulaire :

IV- Liste doublement chainée


Une liste doublement chainée peut-être parcourue dans les deux sens, du premier au
dernier et inversement :

• Chaque cellule contient en plus des données, un champ suivant qui pointe sur la
cellule suivante de la liste, et un champ precedent qui pointe vers la cellule
précédente de la liste
• Une liste doublement chainée est repérée par les pointeurs tête et queue, qui pointent
respectivement sur le premier et le dernier élément de la liste.
• Le pointeur « precedent » du premier élément ainsi que le pointeur « suivant »
du dernier élément contiennent la valeur NIL.
• Lorsque la liste est vide, « tête » et « queue » ont la valeur NIL.

TD/TP N°1 Gestion d’un carnet d’adresse


Un carnet d’adresses contient des contacts contenant chacun : un nom et un numéro de
téléphone.

1. Proposer une structure de liste chainée pour gérer un carnet d’adresses.

M. KENFACK, Support de cours « Structures de données 2 », Page 14 sur 21


2. Ecrire les sous programmes suivants destinés à gérer cette liste :
a) Ajouter un nouveau contact
b) Afficher la liste des contacts
c) Rechercher tous les numéros de téléphone d’un contact de nom donné
d) Mettre à jour un contact donné
e) Supprimer un contact du carnet d’adresses

TD/TP N°2 Transport Aérien


Un vol possède un aéroport de départ et une date de départ et un aéroport d’arrivée et une
date d’arrivée. Un voyage est constitué de un ou plusieurs vols successifs.

1. Proposer des structures de données pour représenter un voyage.


2. Ecrire une procédure d’enregistrement d’un voyage
3. Ecrire une procédure qui affiche toutes les informations sur un voyage
4. Ecrire une fonction qui donne le nombre d’escales d’un voyage
5. Ecrire une fonction qui retourne la durée (en nombre de jours) d’un voyage
6. Ecrire une fonction qui donne le plus long vol d’un voyage.

TD/TP N°3 Liste de chevaux de course


Ecrire les instructions qui saisissent puis affichent une liste de chevaux de course. Chaque
cheval est entré séparément par l'utilisateur. Un cheval est défini par un nom, un dossard,
un temps réalisé dans la course, un classement. La liste des chevaux est une liste chainée.
Le programme permet d'ordonner la liste selon le classement des chevaux et de supprimer
des chevaux de la liste.

M. KENFACK, Support de cours « Structures de données 2 », Page 15 sur 21


CHAPITRE 3 PILES ET FILES

Les piles et les files sont des formes particulières de structures linéaires dans lesquelles les
opérations sont limitées aux extrémités de la structure.

I- Les Piles

1. Définition
Une pile est un ensemble de valeurs ne permettant des insertions ou des suppressions qu’a
une seule extrémité, appelée sommet de la pile.

Concrètement, tout nouvel élément est ajouté au sommet de la pile et toute suppression se
fait au sommet de la pile. Il s'agit donc d'une structure de type LIFO (Last In First Out).

Les piles trouvent de nombreuses applications en informatique notamment en théorie des


langages et automates, en compilation, dans les systèmes d’exploitation (pile d’exécution
d’un programme, …), dans l’évaluation d’expressions arithmétiques, …

2. Représentation
On distingue deux approches pour l’implémentation des piles :

 Les piles statiques : utilisation d’un tableau pour représenter la pile. 


Les piles dynamiques : utilisation des listes chainées.

Quel que soit l’approche utilisée, on utilise la même notation pour représenter graphiquement
une pile :

3. Opérations sur les piles


Les principales opérations possibles sur une pile sont :

 Vérifier si la pile est vide


 Empiler : permet d’ajouter une nouvelle valeur (envoyé en paramètre par l’appelant)
à la pile (au-dessus du sommet et dans le cas d’une pile non pleine) ;
 Dépiler : permet de supprimer une valeur (se trouvant au sommet de la pile) et de la
renvoyer en paramètre. Cette opération n’est possible que si la pile n’est pas vide

M. KENFACK, Support de cours « Structures de données 2 », Page 16 sur 21


Dans ce qui suit, nous utiliseront une pile d’entiers (dans une implémentation dynamique)
Structures de données
Type Element = Enregistrement

Info : entier ;

suivant : ^Element

FinEnregistrement

Type Pile = Enregistrement

sommet : ^Element ;

FinEnregistrement

a) Initialiser une pile

procedure init_pile(pile : Pile)

Debut

pile.sommet  NIL ;

Fin

b) Vérifier si une pile est vide

fonction pile_vide(pile : Pile) : booleen

Debut

Si(pile.sommet = NIL) Alors

retourner Vrai;

Sinon

retourner Faux ;

FinSI

Fin

c) Empiler

Empiler un élément revient à faire une insertion en tête dans la liste chaînée.

procedure empiler(pile :Pile, val : entier)

variable p : ^Element ;

Debut

Alouer(p) ;

p^.info  val ;

M. KENFACK, Support de cours « Structures de données 2 », Page 17 sur 21


p^.suivant  pile.sommet ;

pile.sommet  p ;

Fin

d) Dépiler

Dépiler revient à faire une suppression en tête en renvoyant la valeur se trouvant au sommet.

Attention ! On ne dépile que si la pile en non vide


fonction depiler(pile :Pile) : entier

variable p : ^Element ;

val : entier ;

Debut

// la piste est supposée non vide

p  pile.sommet ;

val p^.info ;

pile.sommet  pile.sommet^.suivant

Liberer(p) ;

retourner val ;

Fin

TPE : Proposer une implémentation statique (avec tableau) d’une pile d’entiers

M. KENFACK, Support de cours « Structures de données 2 », Page 18 sur 21


II- Les Files

1. Définition
Une file est un ensemble de valeurs qui a un début (Debut) et une fin (Queue).

Les données sont retirées dans l’ordre où elles ont été ajoutées. Concrètement, tout nouvel
élément est ajouté à la queue de la file et toute suppression se fait au début de la file. Il
s'agit donc d'une structure de type LIFO (Last In First Out).

On retrouve de nombreuses applications des files dans les systèmes d’exploitation


(algorithmes d’ordonnancement des processus, liste de travaux à imprimer, …), dans la
construction de systèmes de réservation, dans l’implémentation des applications serveur
réseau, les messages en attente dans un commutateur de réseau téléphonique, …

2. Représentation
On peut implémenter une file dans un tableau (file statique) ou dans une liste chaînée (file
dynamique). Quel que soit l’approche employée, on peut utiliser la notation suivante pour
représenter graphiquement une file :

3. Opérations sur les files


Les opérations autorisées avec une file sont :

 vérifier si la file est vide ou non.


 enfiler toujours à la queue,
 défiler toujours à la tête si la file n’est pas vide,

Dans ce qui suit, nous utiliseront une file d’entiers (dans une implémentation dynamique)

Structures de données

Type Element = Enregistrement

Info : entier ;

M. KENFACK, Support de cours « Structures de données 2 », Page 19 sur 21


suivant : ^Element ;

FinEnregistrement

Type File = Enregistrement

tete : ^Element ;

queue : ^Element

FinEnregistrement

a) Initialiser une file


procedure init_file(file :File) Debut

file.tete  NIL ;

file.queue  NIL ;

Fin

b) Vérifier si une file est vide


fonction file_vide(file :File) : booleen

Debut

Retourner (file.tete = NIL) ;

Fin

c) Enfiler
procedure enfiler (file : File, val : entier)

Variable nouveau : ^Element ;

Debut

Alouer(nouveau)

nouveau^.info = val ;

nouveau^.suivant  NIL ;

si (file.tete = NIL) alors // cas où la file est vide

file.tete  nouveau ;

file.queue  nouveau ;

sinon // cas où la file est non vide

file.queue^.suivant  nouveau ;

file.queue  nouveau ;

M. KENFACK, Support de cours « Structures de données 2 », Page 20 sur 21


finsi

Fin

d) Défiler

Attention ! on ne défile que si la file est non vide.

Fonction defiler(file : File) : entier

Variable p :^Element ;

Val : entier ;

Debut

val  file.tete^.info ;

p  file.tete ;

Si (file.tete = file.queue) alors // cas où il y a un seul élément

file.tete = NIL ;

file.queue  NIL ;

sinon // cas où il ya plus d’un élément dans la file

file.tete  file.tete^.suivant ;

finsi

Liberer(p) ;

retourner val ;

Fin

TPE : Proposer une implémentation statique (avec tableau) d’une file d’entiers

M. KENFACK, Support de cours « Structures de données 2 », Page 21 sur 21

Vous aimerez peut-être aussi