- nouvelleListeVide() → Liste
DESCRIPTION : Renvoie une nouvelle Liste VIDE initialement.
- estListeVide(lst:Liste) → Booléen
DESCRIPTION : Renvoie VRAI si la liste lst fournie est vide, FAUX sinon.
- inserer(lst:Liste, elt:Elément, ...) → Liste
DESCRIPTION : Renvoie une nouvelle Liste comportant le nouvel élément à une position définie : en tête de liste, en fin de liste, à un indice i précis. Certaines valeurs seront donc décalées par rapport à la Liste initiale.
Voici plusieurs versions qui pourraient convenir, la dernière étant la plus générique :
insererTete(lst:Liste, elt:Elément) → Liste
DESCRIPTION : Renvoie une nouvelle Liste où l'élément est placé en tête de liste, provoquant le décalage des autres élements.
insererFin(lst:Liste, elt:Elément) → Liste
DESCRIPTION : Renvoie une nouvelle Liste où l'élément est placé en fin de liste.
inserer(lst:Liste, elt:Elément, i:Entier Naturel) → Liste
DESCRIPTION : Renvoie une nouvelle Liste comportant le nouvel élément à la position indiquée par l'indice fourni. Certains emplacements sont donc décalés d'une position par rapport à la Liste initiale.
- Pour insérer comme nouvelle Tête, on doit donc envoyer i valant 0.
- Pour insérer juste avant la fin, on doit envoyer longueur -1.
- Pour insérer comme nouvelle fin, on doit envoyer longueur qui correspond à un indice "vide" pour la liste de départ.
PRECONDITIONS :
- l'indice i (s'il existe) caractérise un indice valide pour l'insertion
- elt doit avoir un type compatible avec le reste des Eléments si la Liste est homogène.
POSTCONDITION : la Liste renvoyée possède un emplacement en plus mais lst est inchangée.
Exemples d'utilisation
lstA = nouvelleListeVide()
lstB = inserer(lstA, 5, 0)
lstB contient alors (5, () ) qu'on pourrait noter simplement (5, ).
lstC = inserer(lstB, 15, 0)
lstC contient alors (15, (5, () )) qu'on pourrait noter (15, 5, ).
lstD = inserer(lstC, 25, 1)
lstD contient alors (15, (25, (5, () ))) qu'on pourrait noter (15, 25, 5, ).
lstE = inserer(lstD, 50, 3)
lstE contient alors (15, (25, (5, (50, () )))) qu'on pourrait noter (15, 25, 5, 50, ).
- supprimer(lst:Liste, ...) → Liste
DESCRIPTION : Renvoie une nouvelle Liste dans laquelle on a supprimé un emplacement prédéfini dans la Liste NON VIDE reçue. Certains emplacements sont donc décalés d'une position par rapport à la Liste initiale.
Voici plusieurs versions qui pourraient convenir, la dernière étant la plus générique :
supprimerTete(lst:Liste) → Liste
DESCRIPTION : Renvoie une nouvelle Liste dans laquelle on a supprimé l'ancien emplacement en tête de liste. Certains emplacements sont donc décalés par rapport à la Liste initiale.
supprimerFin(lst:Liste) → Liste
DESCRIPTION : Renvoie une nouvelle Liste dans laquelle on a supprimé l'ancien emplacement en fin de liste. Certains emplacements sont donc décalés d'une position par rapport à la Liste initiale.
supprimer(lst:Liste, i:Entier Naturel) → Liste
DESCRIPTION : Renvoie une nouvelle Liste dans laquelle on a supprimé l'ancien emplacement ayant cet indice. Certains emplacements sont donc décalés d'une position par rapport à la Liste initiale.
- Pour supprimer l'élément de Tête, on doit donc envoyer i valant 0.
- Pour supprimer l'élément de fin, on doit envoyer longueur -1.
PRECONDITION :
- la Liste est NON VIDE.
- l'indice i (s'il existe) est un indice VALIDE.
POSTCONDITION : la Liste renvoyée possède un emplacement en moins mais lst est inchangée.
Exemple d'utilisation
Partons de lstE contenant (15, (25, (5, (50, () )))) ou simplement (15, 25, 5, 50, ).
lstF = supprimer(lstE, 1)
lstF contient alors (15, (5, (50, () ))) ou simplement (15, 5, 50, ).
lstG = supprimer(lstF, 2)
lstG contient alors (15, (5, () )) ou simplement (15, 5, ).
- acces(lst:Liste, ...) → Place
DESCRIPTION : Renvoie la Place correspondant à une position définie.
PRECONDITION : la Liste reçue doit être NON VIDE.
Voici plusieurs versions qui pourraient convenir, la dernière étant la plus générique :
accesTete(lst:Liste) → Place
DESCRIPTION : Renvoie la Place correspondant à la tête.
accesFin(lst:Liste) → Place
DESCRIPTION : Renvoie la Place correspondant à la fin.
acces(lst:Liste, i:Entier Naturel) → Place
DESCRIPTION : Renvoie la Place correspondant à l'indice i fourni.
PRECONDITION :
- la Liste est NON VIDE.
- l'indice i (s'il existe) est un indice VALIDE.
POSTCONDITION : la Liste est inchangée.
Les deux dernières primitives interagissent directement avec une Place. Attention, dans l'esprit de ce type abstrait Liste, la connaissance d'une Place doit venir de l'utilisation de acces().
- contenu(plc:Place) → Elément
DESCRIPTION : Renvoie l'Elément référencé par plc.
PRECONDITION : plc est une Place valide, contenant un élément compatible avec les autres si la Liste est homogène.
POSTCONDITION supplémentaire : si la Liste est homogène le type de l'Elément est compatible avec ceux de la Liste.
- successeur(plc:Place) → Place
DESCRIPTION : Renvoie la Place qui succède à plc, une Place NON FIN.
PRECONDITION : plc est une Place qui ne doit pas être la dernière de la Liste, la Fin.
Toutes les structures de données qui collent à la définition et qui possèdent ces primitives sont donc des Listes.