ajout cours + exos listes

This commit is contained in:
Gabriel Augendre 2014-12-03 11:31:17 +01:00
parent 65a8ae9749
commit 218378aff6

90
algo_avancee/listes.md Normal file
View file

@ -0,0 +1,90 @@
# Algo avancée - Listes
## Problématique
Les tableaux ont une taille fixe. Ce n'est pas intéressant pour des volumes variables de données. En effet, l'espace mémoire est une ressource. Et il ne faut pas gaspiller les ressources.
L'idée est de trouver une manière dynamique de demander de l'espace mémoire en fonction des données à stocker. Le problème est qu'on a plus de lien entre les cases. Il faut alors également réserver de l'espace dans la "case" pour le chaînage (quel est l'élément suivant).
Cette structure de données correspond aux listes.
L'avantage des listes est son dynamisme. Son inconvénient est la lenteur de l'accès aux données (on est obligés de passer par la tête de la liste puis par toutes les cases suivantes pour accéder à une valeur).
## Exercices
Écrire un algo de création de LLC (Liste Linéaire Chaînée) avec des valeurs saisies par l'utilisateur.
```python
def creationliste(nbval):
"""
: declaration
: ptr : Maillon
: cpt, val : int
: entrée nbval : int
: sortie tete : Maillon
: Précondition
: nbval > 0
"""
#Début
cpt = 0
for cpt in range(nbval):
print("valeur n°", cpt)
val = int(input())
if cpt == 0:
tete = new Maillon()
tete.val = val
ptr = tete
else:
ptr.suivant = new Maillon()
ptr = ptr.suivant
ptr.val = val
#endif
#endfor
ptr.suivant = None
return(tete)
#Fin
```
Écrire deux algos de recherche dans une liste : booléen en sortie et maillon en sortie
```python
def recherche_booleen(tete, valeur):
"""
: declaration
: ptr : Maillon
: entrées
: tete : Maillon
: valeur : X
: Précondition
: tete existe
"""
# Début
ptr = tete
while ptr is not None:
if ptr.val == valeur:
return True
ptr = ptr.suivant
# endwhile
return False
# Fin
```
```python
def recherche_maillon(tete, valeur):
"""
: entrées
: tete : Maillon
: valeur : X
: sortie
: ptr : Maillon
: Précondition
: tete existe
"""
# Début
ptr = tete
while ptr is not None:
if ptr.val == valeur:
return ptr
ptr = ptr.suivant
# endwhile
return None
# Fin
```