Sunteți pe pagina 1din 14

ALGORITMIQUE

AVANCE LANGAGE C

TCSRIT LICENCE 1

KONAN HYACINTHE

CHAPITRE 2 : LES LISTES LINEAIRES CHAINEES


2.1 Les Inconvnients de structure de donnes TABLEAU
La simulation de phnomnes du monde physique tels que :
La file d'attente un guichet ;
Les urgences d'un hpital ;
La distribution de cartes une table de joueurs ;
La gestion des dossiers empils sur un bureau ;
Est mal reprsents par la structure en tableaux. En effet cette structure de donnes prsente les
contraintes suivantes :

Ncessit de dfinir la dimension maximale alloue ds la dclaration, c'est dire de faon


statique
Lourdeur dans la gestion optimale de l'espace occup par les donnes
Ncessit d'effectuer des contrles de dbordement chaque tape du traitement

Une reprsentation moins contrainte devrait :


Permettre l'allocation de mmoire en fonction des besoins, de faon dynamique
Faciliter la gestion de la mmoire occupe en cas d'insertion ou de suppression de nouvelles
donnes
Permettre la simulation de phnomnes du monde physique mal reprsents par la structure
en tableaux
2.2 La notion de liste chane
Une liste linaire sur un ensemble E est une suite finie ( 1; ; ) d'lments de E. Chaque
lment est une CELLULE compose dune donne et dun pointeur vers la cellule suivante.

2.2.1 Insertion/suppression d'une donne

2.2.2 Reprage des cellules d'une liste chane


Le reprage des cellules dune liste chaine seffectue laide de pointeur. Les lments
reprer sont :
Le premier lment de la liste (la tte de liste)
Llment courant
Llment prcdant
Llment suivant
Le dernier lment (la queue de liste)

2.2.3 Exemples de traitements oprs sur les listes


Traitements relatifs la composition structurelle de la liste :
- Positionnement sur la premire cellule de la structure
- Positionnement sur la dernire cellule de la structure
- Calcul de la longueur d'une liste (nombre de cellules)
- Reconnaissance d'une liste vide
- Dplacement du positionnement courant sur la cellule suivante
Traitements relatifs l'information enregistre dans une liste:
- Enregistrement de donnes jusqu' puisement du flot de donnes
- Visualisation de l'information enregistre dans une cellule, quelle que soit sa place
dans la liste
- Visualisation de l'ensemble des informations enregistres dans la liste
- Suppression d'une cellule; ajout dune cellule
2.2.4 Dfinition de la structure de donnes listes
Les attributs de la classe Liste doivent permettre :
le positionnement sur les diffrentes cellules de la liste
la dfinition du type d'information enregistre dans la cellule
Les procdures qui manipuleront cette structure de donnes doivent permettre tous les
traitements dcrits prcdemment (et plus...)

Type LISTE = enregistrement


tte: rfrence {rfrence la cellule tte de liste} ;
curseur : rfrence {rfrence la cellule courante};
Fin;
Variable ListeA : LISTE

rfrence: type dont le domaine de dfinition est l'ensemble des adresses mmoire.
-Valeur de lattribut tte(attribut curseur) : adresse de la case mmoire o est stocke la cellule
de tte de liste (cellule courante)
-Reprsentation graphique : une flche

2.2.5 Dfinition dune cellule


Type CELLULE = enregistrement
Val : info {information stocke dans une cellule};
Suivant : REFERENCE {rfrence une autre cellule};
Fin;
Type REFERENCE = CELLULE
Info: le type de l'information stocke; peut-tre un type de base (par exemple, un entier) ou bien
un type complexe (un agrgat)
Reprsentation graphique des cellules :

2.3 Les procdures communment utilises pour manipuler les listes


Procdure suivant(cible : Liste)
{place le curseur sur la cellule qui suit la cellule courante. Si le curseur tait sur la dernire
cellule, il devient hors liste. Erreur si la liste est vide ou si le curseur est dj hors liste.}
Paramtre (D/R) cible : Liste
Procdure premier(cible : Liste)
{place le curseur sur la premire cellule de la liste. Si la liste est vide, le curseur reste hors liste.}
Paramtre (D/R) cible : Liste
Procdure dernier(cible : Liste)
{place le curseur sur la dernire cellule de la liste. Si la liste est vide, le curseur reste hors liste.}
Paramtre (D/R) cible : Liste
Fonction vide(cible : Liste) retourne boolen
{retourne vrai si la liste est vide, faux sinon}
Paramtre (D) cible : Liste
Fonction horsListe(cible : Liste) retourne boolen
{retourne vrai si le curseur est plac hors liste ou si la liste est vide, faux sinon.}
Paramtre (D) cible : Liste
Fonction info() retourne Info
{retourne la valeur enregistre dans la cellule courante. Erreur si la liste est vide ou si le curseur
est hors liste.}
Paramtre (D) cible : Liste
Procdure affecter(val)
{affecte la valeur val la cellule courante Erreur si la liste est vide ou si le curseur est hors liste.}
Paramtres (D/R) cible : Liste
(D) val : Info
Procdure insrerAvant(val)
{cre une nouvelle cellule, y affecte la valeur val, et l'insreavantla cellule courante. Le curseur
est alors plac sur cette nouvelle cellule qui devient ainsi la nouvelle cellule courante. Si le
curseur tait plac sur la tte, la nouvelle cellule devient la nouvellette. Si la liste tait vide, elle
contient maintenant l'unique cellule qui vient d'tre cre.
Erreur si la liste tait non vide et le curseur hors liste.}
Paramtres (D/R) cible : Liste
(D) val : Info

Insertion dune cellule : insrerAvant

Procdure insrerAprs(cible : Liste ; val : Info)


{cre une nouvelle cellule, y affecte la valeur val, et l'insre aprs la cellule courante. Le curseur
est alors plac sur cette nouvelle cellule qui devient ainsi la nouvelle cellule courante. Si liste
tait vide, elle contient maintenant l'unique cellule qui vient d'tre cre. Erreur si la liste tait
non vide et le curseur hors liste.}
Paramtres (D/R) cible : Liste
(D) val : Info
Insertion dune cellule : insrerAprs

Procdure supprimer(cible : Liste)


{supprime la cellule courante. Le curseur est alors plac sur la cellule suivante qui devient ainsi
la nouvelle cellule courante. Si la cellule supprimer est la dernire cellule, le curseur devient
hors liste. Si la cellule supprimer est la tte, la cellule suivante devient alors la nouvelle tte. Si
la liste ne contenait qu'une seule cellule, la liste devient vide. Erreur si la liste est vide ou si le
curseur est hors liste.}
Paramtres (D/R) cible : Liste
Suppression dune cellule

Procdure saisirListe(cible : Liste)


{Saisit des valeurs (de type Info), jusqu' une valeur d'arrt, et cre au fur et mesure autant de
cellules que ncessaire, en y affectant les valeurs saisies. Le curseur est ensuite replac en tte de
liste.}
paramtre(R) cible : Liste
Procdure afficherListe(cible : Liste)
{Affiche toutes les valeurs contenues dans la liste cible.}
paramtre(D) cible : Liste
Procdure supprimerTout(cible : Liste)
{supprime toutes les cellules de la liste (qui peut tre vide); la liste devient vide et le curseur
devient hors liste.}
paramtre(D/R) cible : Liste

Saisie d'une liste


Procdure saisirListe(cible : Liste)
{Saisit des valeurs (de type Info), jusqu' une valeur d'arrt (constante dfinie dans l'algorithme
appelant), et cre au fur et mesure autant de cellules que ncessaire, en y affectant les valeurs
saisies. Le curseur est ensuite replac en tte de liste.}
Paramtre
Variables

(R) cible : Liste


uneVal : Info
cpt : entier

dbut
saisir(uneVal) ; cpt0
tant que uneValvalStop faire
cptcpt + 1
insrerAprs(cible ; uneVal)
saisir(uneVal)
ftq
premier(cible){replace le curseur en tte}
afficher(La nouvelle liste contient , cpt, cellules.)
fin
Saisie d'une liste : simulation
Procdure afficherListe(cible : Liste)
{Affiche toutes les valeurs contenues dans la liste cible.}
paramtre(D) cible : Liste
variable copieCible : Liste
dbut
copieCible cible{copie de la cible, pour permettre modification du curseur}
premier(copieCible){place le curseur en tte}
tant que non horsListe(copieCible) faire
{arrt quand curseur hors liste}
afficher(info(copieCible)){rcupre la valeur de la cellule courante et l'affiche}
copieCible.suivant() {place le curseur sur la cellule suivante}
ftq
fin

Exemple dalgorithme
Algorithme ManipListes1
{Saisie et affichage dune liste.}
constante (VALSTOP : entier) 0
variable listeA: Liste
dbut
saisirListe(listeA)
afficher("Liste saisie : ")
afficher(listeA)
fin
Exemple de fonction utilisant la liste.
Fonction valMin(uneListe) retourne rel
{retourne la plus petite valeur contenue dans une liste de relssuppose non vide}
Paramtre
(D) uneListe : ListeRel
Fonction inverse(uneListe) retourne Liste
{cre une nouvelle liste, en y affectant les valeurs de la listeuneListemais dans l'ordre inverse. La
liste uneListeest suppose non vide}
Paramtre
(D) uneListe : Liste
Procdure supprimerGlobal(uneVal, uneListe)
{supprime toutes les cellules de la liste uneListequi contiennent la valeur uneVal. Replace le
curseur en tte.}
Paramtre
(D/R) uneListe: Liste
(D) uneVal: Info

Algorithme ManipListes2
{Exemple dalgorithme manipulant les listes.}
constante (VALSTOP : entier) 0
variables listeA, listeB, listeC : Liste
dbut
saisir(listeA)
afficher("listeA: ")
afficher(listeA)
si nonlisteA.vide() alors
listeB inverse(listeA)
afficher("listeBcontient les lments de lalisteAen ordreinverse : ")
afficher(listeB)
supprimerGlobal(0,listeA)
afficher("ListeA sans zros: ")
afficher(listeA)
afficher("Plus petite valeur delisteA:" , valMin(listeA) )
fsi
fin
2.4 Files et Piles
Dans beaucoup d'applications, on peut se contenter de modes d'accs trs restreints la structure
de donnes.
Avantages:
le programme n'a pas se proccuper de dtails de gestion (des rfrences, par exemple)
traitements plus simples et moins rigides (moins d'oprations)
2.4.1 Reprsentation d'une file par une liste chane

les ajouts se font en fin de file, les suppressions en tte de file


seule linformation de la tte est accessible et traitable
file dattente un guichet "premier rentr, premier sorti" (FIFO : first in first out)

10

2.4.2 Reprsentation d'une pile par une liste chane

les ajouts comme les suppressions se font en tte de pile


seule linformation de la tte est accessible et traitable
pile dassiettes "dernier rentr, premier sorti" (LIFO : last in first out)
2.4.1 La structure de donne file
Attributs :
la tte et la queue, mais pas de curseur
Les procdures :
infoTte(): retourne la valeur de linformation en tte de file
vide(): indique si la file est vide
ajouterEnFin(val) : ajoute une information en fin de file
supprimerEnTte() : supprime (et retourne) linformation en tte de file
saisirFile()
afficherFile()
2.4.1.1 Dfinition de la structure de donne file
Les Attributs :
tte: rfrence {rfrence la tte de file}
queue: rfrence {rfrence la queue de file}
Les procdures :
Fonction infoTte() retourne Info
{retourne la valeur enregistre dans la cellule de tte. Erreur si la file est vide}
paramtre(D) cible : File
fonction vide() retourne boolen
{retourne vrai si la file est vide, faux sinon}
paramtre(D) cible : File

11

procdure ajouterEnFin(val)
{Cre une nouvelle cellule, y affecte la valeur val, et l'insre aprs la dernire cellule.
Si file tait vide, elle contient maintenant lunique cellule qui vient d'tre cre.}
Paramtre
(D/R) cible : File ; (D) val : Info
fonction supprimerEnTte() retourne Info
{Supprime la premire cellule de la file et retourne la valeur quelle contient. Si la file ne
contenant qu'une seule cellule, la file devient vide. Erreur si la file est vide.}
Paramtre
(D/R) cible : File
Procdure saisirFile(cible : File)
{Saisit des valeurs (de type Info), jusqu' une valeur d'arrt (constante dfinie dans l'algorithme
appelant), et cre au fur et mesure autant de cellules que ncessaire, en y affectant les valeurs
saisies.}
paramtre
(R) cible : File
variables uneVal : Info, cpt : entier
dbut
saisir(uneVal) ; cpt0
tant que uneValVALSTOP faire
cptcpt + 1
ajouterEnFin(cible ; uneVal)
saisir(uneVal)
ftq
afficher("La nouvelle file contient", cpt, "cellules. ")
fin
Procdure afficherFile(cible : File)
{Affiche toutes les valeurs contenues dans la file cible.}
paramtre(D) cible : File
variablesuneVal: Info
copieCible : File
dbut
copieCible cible
tant que non vide(copieCible) faire
uneVal supprimerEnTte(copieCible)
afficher(uneVal)
ftq
fin

12

2.4.2 La structure de donne pile


Les Attributs :
la tte mais pas de curseur
Les procdures :

infoTte() : retourne la valeur de linformation en tte de pile


vide() : indique si la pile est vide
empiler(val) : ajoute une information en tte de pile
dpiler() : supprime (et retourne) linformation en tte de pile
saisirPile()
afficherPile()

2.4.2.1 Dfinition de la structure de donne pile


Attributs :
tte: rfrence {rfrence la tte de pile}
Les procdures :
Fonction infoTte() retourne Info
{retourne la valeur enregistre dans la cellule de tte. Erreur si la pile est vide}
Paramtre
(D) cible : Pile
Fonction vide() retourne boolen
{retourne vrai si la pile est vide, faux sinon}
Paramtre
(D) cible : Pile
procdure empiler(val)
{Cre une nouvelle cellule, y affecte la valeur val, et l'insre en tte de pile. Si pile tait vide,
elle contient maintenant l'unique cellule qui vient d'tre cre.}
paramtre
(D/R) cible : Pile ; (D) val : Info
fonction dpiler() retourne Info
{Supprime la premire cellule de la pile et retourne la valeur quelle contient. Si la pile ne
contenant qu'une seule cellule, la pile devient vide. Erreur si la pile est vide.}
paramtre
(D/R) cible : Pile

13

Procdure saisirPile()
{Saisit des valeurs (de type Info), jusqu' une valeur d'arrt (constante dfinie dans l'algorithme
appelant), et cre au fur et mesure autant de cellules que ncessaire, en y affectant les valeurs
saisies}
Paramtre
(R) cible : Pile
Variables uneVal: Info
cpt : entier
dbut
saisir(uneVal) ; cpt0
tant que uneValVALSTOP faire
cptcpt + 1
empiler(cible; uneVal)
saisir(uneVal)
ftq
afficher("La nouvelle pile contient", cpt, "cellules.")
fin
Procdure afficherPile(cible : Pile)
{Affiche toutes les valeurs contenues dans la pile cible.}
Paramtre
(D) cible : Pile
variables
uneVal : Info
copieCible : Pile
dbut
copieCible cible
tant que non vide(copieCible) faire
uneVal dpiler(copieCible)
afficher(uneVal)
ftq
fin

14

S-ar putea să vă placă și