Chapitre 7 (suite) Listes particulières Pile : liste particulière T. A. D. pile insertion et suppression au sommet de la pile extraction Files queue Listes doublement chaînées insertion file : liste particulière insertion en : enfiler extraction en : défiler extraction T. A. D. file queue insertion représentation chaînée de la file algorithmique Déition de type : Donner le nom element à Structure( el : T, suiv : pelement) Donner le nom pelement à Ref(element)
représentation chaînée de la file en langage C Déition de la structure : typedef struct Element *pelement; typedef struct Element { T el; pelement suiv;} element; file représentation de la file algorithmique Donner le nom file à Ref(element) Donner le nom pfile à Ref(file) a 1 a i représentation chaînée de la file en langage C Créer_file file : pointeur sur élément typedef pelement file ; déition d un pointeur sur file : typedef liste *pfile ; file a 1 a i fonction créer_ file ( ) : p : file données : vide p NULL pointeur sur file
file_vide enfiler x fonction file_vide( p : file) : booléen données : vide retourner (p = NULL) a 1 a i a 1 a i a n x / enfiler fonction enfiler ( px : pelement, ptrl : pfile) données : p : file si (p = NULL) alors deref(px).suiv p p px tantque (deref(p).suiv NULL) faire tq deref(p).suiv px deref(px).suiv NULL si a 1 a 1 défiler a 2 a i a 2 a i
défiler fonction defiler (ptrl : pfile) : pelement données : px : pelement, p : file si liste_vide( deref(ptrl)) alors px NULL px p deref(ptrl) deref(p).suiv si retourner (px ) représentation d une liste doublement chaînée queue / / représentation d une liste doublement chaînée en algorithmique représentation d une liste doublement chaînée en langage C a n / / a n / / Donner le nom element à : Structure(el : T, suiv : pelement, prec: pelement) Donner le nom pelement à : Ref(element) Déition de la structure : typedef struct Element *pelement; typedef struct Element { T el; pelement suiv; pelement prec; } element;
représentation de la liste doublement chaînée représentation de la liste liste : Référence à la de liste p : liste ptrl : pliste p <- deref(ptrl) Donner le nom liste à Ref(element) Donner le nom pliste à Ref(liste) deref(p).el deref(p).suiv deref(p).prec accés à l élément référence au suivant référence au précédent liste liste / / Référence à liste Référence à liste représentation en langage C liste : pointeur sur élément Créer_liste typedef pelement liste ; déition d un pointeur sur liste: liste typedef liste *pliste ; / fonction créer_ liste ( ) : liste p NULL pointeur sur liste
Insérer en de liste fonction inserer_en_ ( px : pelement, ptrl : pliste) deref(px).suiv p deref(px).prec NULL deref(p).prec px deref(ptrl) px insérer en de liste fonction inserer_ en_ ( px : pelement, ptrl : pliste) si ( deref(ptrl) = NULL) alors inserer_en_tete (px, ptrl ) tantque (deref(p).suiv NULL) faire tq deref(p).suiv px deref(px).suiv NULL deref(px).prec p si Extraire en de liste fonction extraire_en_(ptrl : pliste) : pelement données : px : pelement, p, q : liste si liste_vide( deref(ptrl)) alors px NULL px p q deref(p).suiv deref(q).prec NULL deref(ptrl) q si retourner (px ) extraire en de liste fonction extraire_en_ (ptrl : pliste) : pelement données : px : pelement, p : liste si liste_vide( deref(ptrl)) alors px = NULL si (deref(p).suiv = NULL) alors px p deref(ptrl) NULL tant que (deref(deref(p).suiv).suiv NULL) faire tq px deref(p).suiv deref(p).suiv NULL si si retourner (px )
Parcours itératif premier au dernier fonction parcourir_it(ptrl : pliste) si (liste_vide( deref(ptrl) )) alors ecrire << liste vide >> tantque ( p NULL) faire ecrire(deref(p).el) tq si Parcours itératif du dernier au premier fonction parcourir_it(ptrl : pliste) si (liste_vide( deref(ptrl) )) alors ecrire << liste vide >> tant que (deref(p).suiv NULL) faire tq tantque ( deref(p ).prec NULL) faire ecrire(deref(p).el) p deref(p).prec tq si