Quand les programmeurs parlent de «structures de données», à quoi font-ils référence?

18

Lorsque les programmeurs parlent de "structures de données", parlent-ils uniquement de types de données abstraits comme des listes , des arbres , des hachages , des graphiques , etc.?

Ou ce terme inclut-il une structure contenant des données, telles que les types composites (objets de classe, structures, énumérations, etc.) et les types primitifs (booléens, int, char, etc.)?

Je n'ai entendu que des programmeurs utiliser le terme pour référencer des structures de données complexes ou des types de données abstraits, mais l'article de Wikipedia qui fournit une liste de structures de données inclut à la fois des types composites et des types primitifs dans la définition, ce qui n'est pas ce à quoi je m'attendais (même bien que cela ait du sens).

Lorsque je regarde en ligne, je vois d'autres endroits qui se réfèrent au terme "structure de données" dans le sens de la programmation comme faisant uniquement référence à des types de données abstraits, comme cette conférence du Département d'informatique de l'Université de Stony Brook qui déclare

Une structure de données est une implémentation réelle d'un type de données abstrait particulier.

ou ce wikibook sur les structures de données , qui utilise le terme dans des phrases comme celle-ci:

Les structures de données étant des abstractions de niveau supérieur, elles nous présentent des opérations sur des groupes de données, telles que l'ajout d'un élément à une liste ou la recherche de l'élément de priorité la plus élevée dans une file d'attente

Alors pourquoi n'entends-je jamais des programmeurs se référer à des structures de données complexes ou à des types de données abstraits lorsqu'ils utilisent le terme "structure de données"? Les programmeurs ont-ils une définition du terme différente de celle du dictionnaire?

Rachel
la source
1
Le terme a évolué avec le temps. La foule CS utilise normalement le terme pour les types génériques de structures qui peuvent contenir plusieurs éléments de données connexes (listes liées, arbres, etc.)
Oded
1
n'est-ce pas juste une question de terminologie? une chaîne est en fait un tableau de caractères, et c'est une structure de données qui représente une séquence de caractères individuels
Mithir
3
La «structure de données» n'est-elle pas un terme auto-défini? C'est n'importe quelle structure pour stocker des données! C'est un peu difficile de prendre la question au sérieux.
Michael K
1
@Rachel Votre question est donc de savoir si les types de données primitifs sont ou non des structures de données? if programmers mean something different when they talk about data structuresrecherche toujours des opinions.
yannis
2
"Primitif" dépend complètement de la portée. Au niveau binaire, un int n'existe pas, par exemple. À un niveau encore plus bas, il n'y a même pas de bits - juste une polarisation électrique. Encore une fois, c'est un terme qui se définit lui-même - pas une bonne question du tout.
Michael K

Réponses:

20

La définition générique de "structure de données" est tout ce qui peut contenir vos données de manière structurée, donc oui, cela inclurait les types composites et les types primitifs en plus des types de données abstraits. Par exemple, a stringest une structure de données car elle peut contenir une séquence de caractères de manière structurée.

Cependant, le terme a également une autre signification pour les programmeurs.

Étant donné que le terme «structures de données» est si large, les développeurs utilisent généralement un terme plus spécifique pour identifier de quoi ils parlent, comme classou data objectou primitive type, et le terme spécifique utilisé pour les types de données les plus complexes ou abstraits est «structure de données»

C'est pourquoi vous entendez le plus souvent la «structure de données» utilisée pour les types de données abstraits comme les tableaux, les listes, les arbres et les tables de hachage, et non pour des choses comme les types de données primitifs

Alex
la source
4
Je pense que les graphiques sont également très courants, mais ils sont juste rarement représentés dans les bibliothèques standard car ils sont très difficiles à construire de manière générique et efficace.
Klaim
Ainsi, lorsque les programmeurs parlent de "structures de données", parlent-ils généralement de types de données abstraits ? Et bien que les types primitifs (tels que int, bool ou char) et les types composites (comme une classe, une structure ou une énumération) soient toujours considérés comme des structures de données par les programmeurs, ils sont généralement désignés par des termes différents?
Rachel
1
@Rachel techniquement une structure de données pourrait être une implémentation homebrewed utilisant des pointeurs / classes ect aussi. J'ai fait des "structures de données" très moches similaires à des listes dans le cadre d'une affectation aux devoirs C ++. Nous n'appelons tout simplement pas les structures de données des classes aussi souvent car elles sont généralement plus spécifiques.
Ben Brocka
@BenBrocka Ahhh donc "structure de données" est un terme très large qui couvre ces autres objets, mais il est généralement préférable d'être plus précis lorsque l'on parle de structures de données et d'utiliser des termes comme "type de données primitif" ou "objet de données" au lieu de "Structure de données". Et le terme spécifique couramment utilisé pour des objets comme Lists, Trees, Graphs, etc se trouve être « structures de données »
Rachel
1
@Rachel oui, même si tout est une structure de données (à proprement parler), le terme «structure de données» fait généralement référence à ces types de données abstraits. Je dirais que le terme «structure de données» du point de vue d'un développeur fait référence à la façon dont il stocke les données. Il peut s'agir d'une liste en mémoire, d'un fichier sur le disque ou d'une structure de données personnalisée qu'il a implémentée lui-même.
Alex
5

Le terme fait référence aux deux, bien que des choses comme intset booleanssoient généralement considérées comme des types de données primitifs (ou des structures de données primitives). Le terme lui-même se réfère simplement à tout ce qui stocke des données d'une manière spécifique. intRépond certainement aussi bien à cette définition qu'à quelque chose comme une table de hachage, mais c'est plus simple.

En règle générale, lorsque les gens utilisent la structure de données, ils se réfèrent à des structures de données plus complexes, et non pas les plus simples, mais les deux répondent à la définition.

Oleksi
la source
2
Je ne pense pas avoir entendu quelqu'un parler de int"structure de données".
Qwertie
2
@Qwertie moi non plus, mais c'est toujours ce que c'est. On l'appelle plus souvent un "type de données", mais cela signifie à peu près la même chose que la "structure de données"
Oleksi
0

La définition la plus simple et très basique, que j'ai jamais entendu parler des structures de données, est de stocker des données dans la mémoire de telle manière que les opérations de base comme l'insertion, la mise à jour, la suppression, etc. puissent être effectuées de manière efficace en termes de temps et de mémoire.

Ainsi, un type de données indique le type de données que nous y avons stocké. Il peut être entier, décimal, caractère, chaîne ou un objet. Il peut s'agir de types composites ou de types primitifs en plus de types de données abstraits.

Mais, nous utilisons des structures de données lorsque nous voulons stocker des données complexes dans la mémoire. C'est la raison pour laquelle nous n'entendons parler que des types de données comme les tableaux, les listes, les arbres et les tables de hachage, et non pour des choses comme les types de données primitifs

Nishant sethi
la source