Une structure de données est une manière de formater les données afin qu’elles puissent être utilisées par un programme informatique ou un autre système. Les structures de données sont un élément fondamental de l’informatique, car elles donnent forme aux points de données abstraits. Elles permettent ainsi aux utilisateurs et aux systèmes d’organiser, d’utiliser et de stocker efficacement les données.
Les structures de données combinent les types de données primitifs tels que les nombres, les caractères, les booléens et les nombres entiers dans un format cohérent. Seul, chacun de ces types de données primitifs ne possède qu’une seule valeur. Lorsqu’ils sont combinés dans une structure de données, ils permettent des opérations de données de niveau supérieur telles que le tri, la recherche, l’insertion et la suppression.
Prenons l’exemple d’une équipe commerciale qui souhaite suivre les chiffres de vente quotidiens. Au lieu d’enregistrer chaque point de données séparément, l’équipe peut stocker ces données dans un type de structure de données appelé « tableau ». (Pour plus d’informations, consultez « Types de structures de données »).
En Python, le tableau peut ressembler à ceci :
Le tableau permet à l’équipe de conserver toutes ces données ensemble, de récupérer facilement les points de données en cas de besoin et d’exécuter des fonctions sur chaque élément et sur l’ensemble du tableau.
Les programmeurs informatiques s’appuient sur les structures de données pour créer des applications efficaces. Dans les domaines de l’informatique et de la science des données, les structures de données sont essentielles aux systèmes d’exploitation, aux bases de données, aux sites Web, aux graphiques, à l’analytique, à la blockchain, aux applications de machine learning (ML) et plus encore.
Les structures de données étant essentielles à la rédaction d’un code efficace, elles figurent souvent parmi les premières leçons données aux débutants en programmation. Elles constituent également un sujet courant lors des entretiens d’embauche dans la programmation informatique.
Les structures de données sont importantes car elles permettent aux ordinateurs de traiter plus facilement les jeux d’informations volumineux et complexes. En organisant logiquement les éléments de données, les structures de données améliorent l’efficacité du code informatique et le rendent plus simple à comprendre.
Les programmeurs utilisent les structures de données pour améliorer la vitesse et la force des algorithmes, qui sont des ensembles d’instructions permettant d’effectuer une tâche informatique. En programmation informatique, cette combinaison est connue sous le nom de « SDA » (« structures de données et algorithmes »). Le SDA aide les programmeurs à relever un double défi, à savoir la complexité temporelle et la complexité spatiale.
La complexité temporelle mesure le temps nécessaire à un algorithme pour accomplir une tâche en fonction de la quantité d’entrées. La complexité spatiale mesure la quantité de mémoire utilisée par l’algorithme en fonction de la quantité d’entrée.
À l’aide de l’indicateur mathématique Big O, les programmeurs peuvent mesurer la complexité de l’espace et du temps. Ils peuvent ensuite déterminer quelles structures de données et quels algorithmes offrent le temps d’exécution le plus rapide et la plus grande efficacité en termes d’espace pour une tâche donnée.
Les structures de données jouent également un rôle important dans la programmation dynamique, une technique permettant de résoudre rapidement les problèmes complexes.
La programmation dynamique utilise la récursivité pour diviser un problème en composants plus petits. Ensuite, le programme trouve des solutions pour ces composants et rassemble les sous-solutions pour obtenir une solution complète au problème initial.
Les structures de données permettent une programmation dynamique en donnant au programme un moyen de stocker et de récupérer chaque sous-solution, et en conservant les éléments de données logiquement organisés au cours du processus.
Par exemple, les valeurs calculées peuvent être conservées dans un tableau. Au lieu de recalculer ces valeurs lorsque le moment est venu de formuler la solution complète, le programme peut les récupérer à partir du tableau.
Grâce à ces fonctionnalités, les programmeurs peuvent gagner du temps et résoudre les problèmes plus efficacement.
Les structures de données sont divisées en deux catégories : linéaires et non linéaires.
Dans une structure linéaire, les données sont organisées sur une ligne, chaque élément de données étant placé l’un après l’autre en séquence. Cette disposition simplifie la navigation et l’accès aux éléments dans l’ordre.
Simples, les structures de données linéaires sont considérées comme faciles à mettre en œuvre. Les structures de données courantes dans cette catégorie comprennent les tableaux, les listes liées et les files d’attente.
Dans une structure de données non linéaire, la logique organisationnelle est un agencement autre que linéaire et séquentiel. Par exemple, les points de données peuvent être ordonnés hiérarchiquement ou reliés en réseau.
Comme ils ne sont pas connectés les uns aux autres sur une seule ligne, les éléments d’une structure non linéaire ne peuvent pas tous être parcourus et consultés en une seule exécution, comme c’est le cas dans une structure de données linéaire. Les arbres et les graphes sont des exemples de structures de données non linéaires.
Il existe plusieurs types de structures de données que les programmeurs peuvent utiliser selon les systèmes qu’ils construisent et ce qu’ils ont à faire avec les données. Les structures de données courantes sont les suivantes :
Les tableaux sont l’un des types de structures de données les plus élémentaires et les plus utilisés. Ils stockent des données de type similaire dans des emplacements de mémoire adjacents. Cette structure permet de localiser et d’accéder facilement aux éléments du même type.
Utilisations : les utilisations courantes des tableaux sont le tri, le stockage, la recherche et l’accès aux données. Les tableaux peuvent également servir de base pour mettre en œuvre d’autres structures de données telles que les files d’attente et les piles.
Exemple : le tableau des scores moyens de satisfaction client enregistrés tous les jours par un centre d’appels peut ressembler à ceci :
Une structure de données de type file d’attente effectue les opérations sur les données dans un ordre prédéterminé appelé « FIFO », qui signifie « premier entré, premier sorti ». Cela signifie que le premier élément de données à ajouter sera le premier à être supprimé. Les programmeurs utilisent souvent cette structure de données pour créer des files d’attente prioritaires, similaires aux listes d’attente.
Utilisations : les structures de données de type file d’attente peuvent être utilisées pour déterminer le prochain titre d’une playlist, le prochain utilisateur à avoir accès à une imprimante partagée ou le prochain appel auquel il faudra répondre dans un centre d’appels.
Exemple : les clients qui souhaitent parler à un agent du centre d’appels peuvent être placés dans une file d’attente comme celle-ci :
Dès qu’un agent est disponible, il est automatiquement mis en relation avec le premier client de la file d’attente, qui est ensuite retiré de la liste. Maintenant, la file d’attente ressemble à ceci :
Tout comme les files d’attente, la structure de données de la pile exécute les opérations dans un ordre prédéterminé. Cependant, au lieu du FIFO, les piles utilisent le format « LIFO », qui signifie « dernier entré, premier sorti ». Le dernier élément de données à ajouter sera le premier à être supprimé.
Utilisations : les piles peuvent être utilisées pour garantir l’ouverture et la fermeture correctes des crochets ou des balises dans les codes informatiques, suivre l’historique récent du navigateur ou annuler les dernières opérations effectuées dans une application.
Exemple : de nombreuses applications utilisent les piles pour suivre les actions des utilisateurs, afin qu’elles puissent être facilement annulées. Par exemple, un outil de traitement de texte peut conserver une pile comme suit :
Lorsqu’un utilisateur clique sur le bouton « annuler », la dernière action effectuée dans la pile (saisie de « T ») est annulée. Maintenant, la pile ressemble à ceci :
Les listes liées stockent les éléments de données dans un ordre linéaire, chacun étant relié à l’élément suivant de la liste. Cette structure facilite l’insertion des nouveaux éléments et la suppression des éléments existants sans avoir à modifier l’ensemble.
Utilisations : les listes liées sont souvent utilisées pour les insertions et les suppressions fréquentes dans des scénarios tels que les historiques des navigateurs Web, les listes de lecture multimédia et les opérations d’annulation ou de restauration dans les applications.
Exemple : la version simplifiée d’une liste liée de vidéos dans un lecteur multimédia peut ressembler à ceci :
Chaque objet de la liste pointe vers le suivant. Ainsi, lorsque la vidéo 1 est terminée, le lecteur multimédia est guidé pour démarrer la vidéo 2.
Les structures de données arborescentes, parfois appelées « arbre préfixe », permettent d’établir des relations hiérarchiques entre les éléments de données. Un nœud parent unique se trouve au sommet de l’arborescence, les sous-nœuds enfants se ramifiant aux niveaux suivants en dessous.
Chaque classe d’arbres, comme les arbres de recherche binaire, les arbres AVL et les arbres B, a ses propriétés et prend en charge certaines fonctions. Par exemple, dans un arbre de recherche binaire, chaque nœud a 2 enfants au maximum. Cette structure permet des recherches rapides dans les jeux de données.
Utilisations : les arbres sont souvent utilisés pour représenter les hiérarchies dans les organigrammes, les systèmes de fichiers, les systèmes de noms de domaine, l’indexation des bases de données et les arbres de décision dans les applications de machine learning.
Exemple :
Une structure de données de type graphe organise les relations entre les différents objets à l’aide de sommets et d’arêtes. Les sommets sont des points de données « représentés » par des points, et les arêtes sont des lignes qui relient les sommets.
Par exemple, sur une carte, les villes sont des sommets, et les routes qui les relient sont des arêtes. Sur Facebook, les utilisateurs seraient des sommets, et les amitiés qui les relient seraient des arêtes.
Utilisations : les structures de données de type graphe sont souvent utilisées avec des algorithmes qui recherchent des données au sein des réseaux complexes de relations. Parmi les exemples les plus courants, citons les recherches en largeur, qui portent sur les données niveau par niveau, et les recherches en profondeur, qui explorent plusieurs niveaux de données pour trouver des informations.
Exemple :
Une structure de données de type hachage, également appelée « table de hachage » ou « carte de hachage », utilise une fonction de hachage pour stocker les valeurs de données. Cette fonction crée un hachage : une clé numérique unique qui correspond à l’emplacement d’une valeur de données dans la mémoire.
La table de hachage contient un index consultable de chaque hachage et paire de valeurs de données, ce qui permet de voir, d’ajouter et de supprimer rapidement les données de la table.
Utilisation : les structures de données de type hachage permettent d’extraire rapidement les données à partir d’annuaires téléphoniques, de dictionnaires et de registres du personnel. Elles peuvent également être utilisées pour indexer les bases de données, stocker les mots de passe et équilibrer la charge des systèmes informatiques.
Exemple : la version simplifiée d’une table de hachage qui organise la liste de contacts d’un smartphone peut ressembler à ceci :
La fonction de hachage associe chaque clé à l’index correspondant. Ainsi, lorsqu’un utilisateur saisit une clé (le nom d’un contact), la table de hachage renvoie la valeur associée au même index (le numéro du contact).
Les structures de données sont essentielles à la conception d’applications logicielles, car elles mettent en œuvre la forme concrète des types de données abstraits.
Un type abstrait de données est un modèle mathématique qui classe le comportement d’un type de données et les opérations qui peuvent être effectuées sur ce dernier. Par exemple, le type abstrait de données d’une file d’attente définit le comportement de la file d’attente (selon le principe PEPS). La structure de données de type file d’attente permet de formater les données en file d’attente, pour que les programmes informatiques puissent appliquer le principe PEPS à ces données.
De nombreux langages de programmation, tels que Python, Java et JavaScript, incluent des structures de données intégrées qui permettent aux développeurs de travailler plus efficacement.
Les structures de données sont couramment utilisées dans les programmes informatiques. Exemples :
Les structures de données permettent de stocker les données de manière logique et efficace, avec un niveau de persistance élevé, afin qu’elles restent facilement accessibles à partir des bases de données et d’autres applications. Les structures de données peuvent également assurer une organisation logique des grandes quantités de données, afin qu’elles puissent être plus facilement triées, ordonnées et traitées.
Par exemple, un site Web peut utiliser des listes liées pour stocker les journaux d’activité des utilisateurs. Les listes enregistrent les événements par ordre chronologique, et les liens entre les événements permettent de dresser un tableau complet de ce que fait l’utilisateur au cours de chaque session.
Les structures de données indexent les informations en associant les valeurs de données aux éléments de données correspondants dans une base de données, ce qui facilite la localisation et l’accès à ces enregistrements de données.
Par exemple, un site de commerce électronique pourra utiliser une table de hachage pour indexer les produits par catégorie. Lorsque l’utilisateur souhaite afficher une seule catégorie, le site Web peut utiliser la valeur de hachage pour récupérer rapidement tous les produits associés, au lieu de rechercher dans la base de données de chaque produit.
Les structures de données organisent les données afin qu’elles puissent être facilement partagées par les applications. Par exemple, de nombreuses applications utilisent les files d’attente pour gérer et envoyer des paquets grâce à des protocoles tels que TCP/IP. Les files d’attente permettent de s’assurer que les paquets sont envoyés et reçus dans l’ordre dans lequel ils sont créés.
En organisant les données de manière que les applications et les utilisateurs finaux puissent les comprendre, les structures de données facilitent la recherche et la localisation.
Par exemple, les structures de données de type graphe permettent aux utilisateurs de trouver plus facilement les personnes qu’ils connaissent sur les réseaux sociaux. Les structures de données de type graphe enregistrent les relations entre les sommets ou les nœuds. Les algorithmes de recherche suivent les connexions de nœud à nœud pour localiser efficacement les utilisateurs associés.
Les structures de données favorisent l’évolutivité des systèmes en permettant aux programmes informatiques de traiter de grands jeux de données, de résoudre des problèmes complexes et d’utiliser les ressources plus efficacement.
Par exemple, les tables de hachage et les structures hiérarchiques facilitent la localisation des informations pertinentes dans les grands jeux de données. Au lieu d’inspecter chaque élément, les systèmes n’ont qu’à utiliser la bonne clé ou à suivre le bon parcours à travers l’arbre. Cela permet d’assurer un niveau de performance élevé, puisque le système n’a pas besoin de beaucoup de ressources pour rechercher dans ces énormes quantités de données.
Élaborez une stratégie de gestion des données qui élimine les silos, réduit la complexité et améliore la qualité des données pour offrir une expérience client et collaborateur exceptionnelle.
Watsonx.data vous permet d’adapter le dimensionnement des analyses et de l’IA à toutes vos données, où qu’elles se trouvent, grâce à un entrepôt de données ouvert, hybride et gouverné.
Avec IBM Consulting, exploitez les données de votre entreprise et développez une organisation basée sur les informations pour tirer des avantages métier.