Algorithmique
Structures séquentielles Les listes – février 2013
Info-Sup
Épita
axiomes
1≤k≤longueur(λ)+1⇒longueur(ins´erer(λ, k, e)) = longueur(λ)+1
1≤k≤longueur(λ)+1&1≤i < k ⇒i`eme(ins´erer(λ, k, e), i) = i`eme(λ, i)
1≤k≤longueur(λ)+1&k=i⇒i`eme(ins´erer(λ, k, e), i) = e
1≤k≤longueur(λ)+1&k < i ≤longueur(λ)+1
⇒i`eme(ins´erer(λ, k, e), i) = i`eme(λ, i −1)
avec
λ: Liste
k, i : Entier
e: Élément
algorithme fonction inserer : booleen
parametres globaux
t_liste L
parametres locaux
entier k
t_element e
variables
entier i
debut
si (L.longueur >= LMax) ou (k < 1) ou (k > L.longueur+1) alors
retourne faux
sinon
pour i←L.longueur jusqu’a kdecroissant faire
L.elts[i+1] ←L.elts[i]
fin pour
L.elts[k] ←e
L.longueur ←L.longueur + 1
retourne vrai
fin si
fin algorithme fonction inserer
L’utilisation de mémoire statique impose de tester que le résultat ne dépassera pas la taille du vecteur
utilisé pour représenter la liste.
Un peu de complexité : Si nest la longueur de la liste, une insertion demande au plus n+1 affectations
(insertion à la première place = pire des cas)
Remarques La représentation contiguë est bien adaptée aux listes itératives : accès et parcours sont
très efficaces. Mais les suppressions et insertions sont coûteuses (à cause des déplacements). De plus, il
est nécessaire de savoir majorer la taille des listes. Elle est par contre moins adaptée aux listes récursives :
l’accès au premier élément est facile, mais les opérations cons et fin sont difficiles à représenter. Nous
verrons, dans la section suivante, la représentation chaînée qui est bien plus adaptée aux listes récursives.
1.3 Extensions
L’opération concaténer
opérations
concaténer : Liste ×Liste →Liste
axiomes
longueur(concat´ener(λ, λ′)) = longueur(λ) + longueur(λ′)
1≤i≤longueur(λ)
⇒i`eme(concat´ener(λ, λ′), i) = i`eme(λ, i)
longueur(λ)+1≤i≤longueur(λ) + longueur(λ′)
⇒i`eme(concat´ener(λ, λ′), i) = i`eme(λ′, i −longueur(λ))
3