MatheX – Licence CC BY-NC-SA 4.0 - https://www.mathexien.com

Terminale - spécialité Numérique et Sciences Informatiques

3. Structure de données linéaire

Objectifs:

  • Introduire le concept de structure de données abstraite
  • Découvrir les principales structures de données linéaires
  • Réaliser différentes implémentations de ces structures

Structure de données abstraite

En théorie de l'informatique, on étudie des algorithmes définient en langage naturel ou en pseudo-code en dehors de la considération des choix d'implémentation et donc en dehors des spécificités techniques d'un langage de programmation.

Ces algorithmes s'appuient sur des modèles théoriques d'organisation et d'interactions de données, les structures de données abstraites.

Une structure de données abstraite définit :

On va étudier ici des structures de données abstraites linéaires classiques et dans de prochains chapitres les autres.

Liste

Une liste (list ou sequence) est une structure de données abstraite linéaire:

Mission 3.1.

Utiliser les primitives pour créer la liste : $(\,1\,;\, 2\,;\, 3\,;\, 4\,)$
Utiliser les primitives pour modifier la liste pour obtenir: $(\,2\,;\, 3\,;\, 1\,;\, 4\,)$
Représenter l'état de la liste après chaque appel de primitive en précisant sa tête et sa queue.


# Vos réponses aux questions ici (et/ou insertion d'images)






On peut implémenter simplement une liste avec un tableau (array)

Un tableau est une structure de données représentant une zone contigüe en mémoire de taille fixée.
Chaque élément du tableau est repéré par son indice. L'accès en mémoire est alors quasi-direct (simple calcul d'adresse à partir de l'adresse de base)

Les listes Python sont en fait des tableaux dynamiques, c'est à dire des tableaux dont la taille est modifiée dynamiquement (pour s'adapter au contenu).

Attention donc à bien distinguer les listes telles que définies ici en tant que structure de données abstraite et les listes Python qui sont un choix d'implémentation spécifique.

Mission 3.2.

Proposer une implémentation des listes avec un tableau de taille fixe:

  • en pseudo-code
  • en Python avec le paradigme fonctionnel
  • en Python avec le paradigme Objet

Identifier les forces et faiblesses de cette implémentation.

Vous pouvez:

- utiliser la 1ère case du tableau pour stocker le nombre d'élément    
- identifier les cases sans élément avec une valeur nulle (None)   
- considérer que la tête de liste est le dernier élément du tableau

# Vos réponses aux questions ici (et/ou insertion d'images)






Liste chaînée:

Capture d’écran 2021-11-09 à 08.27.12.png

Une liste chaînée (linked list) est une structure de données abstraite linéaire:

Mission 3.3.

Utiliser les primitives pour créer la liste chaînée: $1\rightarrow2\rightarrow3\rightarrow4$
Utiliser les primitives pour modifier la liste chaînée pour obtenir: $2\rightarrow3\rightarrow1\rightarrow4$
Représenter l'état de la liste chaînée après chaque appel de primitive en précisant sa tête.


# Vos réponses aux questions ici (et/ou insertion d'images)






Mission 3.4.

Proposer une implémentation des listes chaînées:

  • en pseudo-code
  • en Python avec le paradigme fonctionnel
  • en Python avec le paradigme Objet

Identifier les forces et faiblesses de cette structure.

NB: Pour l'implémentation objet, implémenter au préalable la classe Cellule avec les attributs:

valeur : la valeur de la cellule
suivant: adresse de la cellule suivante éventuelle (None si dernière cellule de la liste chaînée)

Pile (LIFO):

Capture d’écran 2021-11-09 à 07.49.49.png

Une pile (stack) est une structure de données abstraite linéaire:

Mission 3.5.

Utiliser les primitives pour créer la pile:

4
3
2
1

Utiliser les primitives pour modifier la pile pour obtenir:

4
1
3
2

Représenter l'état de la pile après chaque appel de primitive en précisant son sommet


# Vos réponses aux questions ici (et/ou insertion d'images)






Mission 3.6.

Proposer une implémentation des piles:

  • en pseudo-code
  • en Python avec le paradigme fonctionnel
  • en Python avec le paradigme Objet

Identifier les forces et faiblesses de cette structure.

NB: Pour l'implémentation objet, implémenter au préalable la classe Cellule avec les attributs:

valeur : la valeur de la cellule
suivant: adresse de la cellule suivante éventuelle (None sinon)

File (FIFO):

file.png

Une file (queue) est une structure de données abstraite linéaire:

Mission 3.7.

Utiliser les primitives pour créer la file: $1\rightarrow2\rightarrow3\rightarrow4$
Utiliser les primitives pour modifier la file pour obtenir: $2\rightarrow3\rightarrow1\rightarrow4$
Représenter l'état de la liste après chaque appel de primitive


# Vos réponses aux questions ici (et/ou insertion d'images)






Mission 3.8.

Proposer une implémentation des files:

  • en pseudo-code
  • en Python avec le paradigme fonctionnel
  • en Python avec le paradigme Objet

Identifier les forces et faiblesses de cette implémentation.

NB: Pour l'implémentation objet, implémenter au préalable la classe Cellule avec les attributs:

valeur : la valeur de la cellule
suivant: adresse de la cellule suivante éventuelle (None sinon)

Mission 3.9.

Proposer une implémentation d'une File avec deux Piles (en paradigme objet)

Récursivité

Mission 3.10.

Proposer une implémentation récursive en paradigme objet des méthodes de calcul de longueur et d'accès aux éléments d'une liste chaînée, d'une pile et d'une file.

NB: à traiter après le cours sur la récursivité

En option (++)

Mission 3.11.

Implémenter une Pile avec deux Files

Mission 3.12.

Implémenter un analyseur syntaxique html