Structures de données Flashcards

1
Q

Défini la notion de structure de données

A

Une structure de données est un format d’organisation, de gestion et de stockage de données qui permet des accès et des modifications efficaces.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
2
Q

Donne des exemples de structure de donnée

A

Tableaux, classes (la classe Etudiant permet de stocker, accéder et modifier les données d’étudiants : prénom, nom, matricule…)

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
3
Q

Quelles sont les limitations concernant les tableaux en Java ?

A
  1. Sa taille doit être déterminée à l’avance
  2. Il ne s’agrandit pas
  3. Il n’est pas un objet
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
4
Q

Défini l’abstraction d’une structure de donnée…

A

L’abstraction d’une structure de donnée est typiquement représentée par une interface. Il définit les opérations applicables sur les données.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
5
Q

… et son implémentation concrète

A

L’implémentation concrète est typiquement une classe qui implements l’interface. Il définit comment les données sont organisées et les opérations effectuées.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
6
Q

Donne un exemple d’une abstraction d’une structure de donnée + ses opérations

A

Liste d’éléments :
1. Obtenir la taille (le nombre d’éléments)
2. Obtenir l’élément à la position i
3. Modifier l’élément à la position i
4. Insérer un élément à la position i
5. Insérer un élément au début/à la fin
6. Supprimer l’élément à la position i

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
7
Q

Vrai ou faux : Une liste est plus flexible qu’un tableau en java

A

Vrai, pas besoin de fixer la taille d’une liste ou de nombre maximal d’éléments à l’avance.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
8
Q

Donne une implémentation possible pour le type de données abstrait List

A

Utiliser un tableau pour stocker les éléments. En effet, un tableau stocke la séquence d’éléments de manière contiguë en mémoire.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
9
Q

Vrai ou faux : L’avantage d’un tableau est la performance pour accéder à un élément

A

Vrai, le temps de calcul de l’adresse de la case mémoire du ième élément se fait en temps constant, O(1)
adresse = début du tableau + i * taille d’une case

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
10
Q

Comment ajouter un élément à la fin ?

A

Une liste permet d’ajouter un élément à la fin via la méthode add, par exemple .add(40)

Puisque les éléments doivent être contigus, la case qui suit le tableau doit être libre, dans quel cas on peut augmenter la taille du tableau sans problème et efficacement (sauf en Java)

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
11
Q

Que faire (en Java) si la case n’est pas libre ?

A

Il faut allouer un nouveau tableau, ailleurs dans la mémoire, là où il y a assez de place pour mettre tous les éléments en plus de celui à ajouter

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
12
Q

Existe-t-il d’autres solutions ?

A

Oui, les listes chaînées :
1. À chaque élément, on ajoute l’adresse mémoire (la référence) du prochain dans la liste.
2. Une paire (référence, élément) s’appelle noeud (node)

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
13
Q

Comment obtenir les éléments dans les listes chaînées ?

A

En parcourant les noeuds

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
14
Q

Vrai ou faux, un nouveau noeud peut être placé n’importe où en mémoire ?

A

Vrai

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
15
Q

Vaut mieux utiliser les listes chainées ou les tableaux dynamiques ?

A

Ça dépend de l’application. Beaucoup de modifications/accès en début de liste => Liste chainées.
Beaucoup d’accès aux éléments partout dans la liste => Tableau Dynamique

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
16
Q

Qu’est ce que ArrayList<E> et LinkedList<E> ?</E></E>

A

Ce sont des types de données prédéfinis dans la libraire java.util.

ArrayList<E> => Implantation d'un tableau dynamique</E>

LinkedList<E> => Implantation d'une liste chaînée</E>

Le <E> indique une classe générique, càd paramétrisée par un type (par exemple, ArrayList<Etudiant>)</Etudiant></E>

17
Q

C’est quoi List<E> ?</E>

A

Une interface pour liste

18
Q

Qu’est-ce qu’une collection ?

A

Une collection représente un groupe d’objets, appelés ses éléments

19
Q

Quel est l’avantage d’un double LinkedList ?

A

Navigation bidirectionnelle : chaque noeud a deux références (adresse). Cela permet donc de savoir où est le précédent et le prochain noeud. De plus, on passe de O(n) => O(1) pour la suppression de la fin.

20
Q

Qu’est-ce qu’une pile (Stack) ?

A

Une pile (stack) est une collection d’éléments avec les deux opérations :
1. push, entrer un élément
2. pop, sortir le dernier entré des éléments présents

21
Q

Que veux dire LIFO ?

A

Last In, First Out

22
Q

En plus de push and pop, on peut :

A

Regarder le dessus de la pile, vérifier si la pile est vide

23
Q

Qu’est-ce qu’une file (queue) ?

A

Une file d’attente (queue) est une collection d’éléments avec les 2 opérations :
1. enqueue, entrer un élément
2. dequeue, sortir le premier entré des éléments présents

24
Q

Que veut dire FIFO ?

A

First In First Out

25
Q

Qu’est-ce qu’un arbre (Tree) ?

A

Un arbre est une structure de données hiérarchique :
1. Le premier noeud est la racine
2. Chaque noeud peut être suivi de 0,1,2,…, N noeuds
3. Chaque noeud réfère à ses enfants et a exactement 1 noeud parent (sauf la racine qui en a pas)
4. Un noeud qui n’a pas d’enfant est appelé une feuille

26
Q

Qu’est-ce qu’un arbre binaire (binary tree) ?

A

Un arbre binaire est un cas particulier d’un arbre où chaque noeud a au plus deux enfants.

27
Q

Qu’est-ce qu’un map ?

A

Un map (ou Dictionnaire, ou Tableau associatif) est une structure de données qui permet d’associer des clés et des valeurs de types arbitraires

28
Q

Donne des implémentations concrètes de map

A

TreeMap<K, V>
HashMap<K, V>

29
Q

À quoi sert l’interface iterator ?

A

Il est utilisé pour parcourir les éléments des structures de données.

30
Q

L’interface iterator définit les méthodes :

A

boolean hasNext(): indique s’il y a un autre élément
element next(): retourne le prochain élément

31
Q

À quoi sert les types paramétrés ?

A
  1. Permettent de définir des classes/interfaces avec un ou plusieurs types paramétrés
  2. Évitent de réécrire une nouvelle classe pour chaque type qu’on veut manipuler
  3. Évitent de rendre tout object et de caster partout