Quando os programadores falam sobre "estruturas de dados", a que eles estão se referindo?

18

Quando os programadores falam sobre "estruturas de dados", eles estão falando apenas de tipos abstratos de dados, como listas , árvores , hashes , gráficos etc.?

Ou esse termo inclui alguma estrutura que contém dados, como tipos compostos (objetos de classe, estruturas, enumerações etc.) e tipos primitivos (booleano, int, char, etc.)?

Eu só ouvi os programadores usarem o termo para fazer referência a estruturas de dados complexas ou tipos de dados abstratos, no entanto, o artigo da Wikipedia que fornece uma lista de estruturas de dados inclui tipos compostos e tipos primitivos na definição, o que não é o que eu esperava (mesmo embora faça sentido).

Ao procurar on-line, vejo outros lugares que se referem ao termo "estrutura de dados" no sentido de programação, como apenas referindo-se a tipos de dados abstratos, como esta palestra do Departamento de Ciência da Computação da Universidade Stony Brook, que afirma

Uma estrutura de dados é uma implementação real de um tipo de dado abstrato abstrato.

ou este wikibook sobre estruturas de dados , que usa o termo em frases como esta:

Como as estruturas de dados são abstrações de nível superior, elas nos apresentam operações em grupos de dados, como adicionar um item a uma lista ou procurar o item de maior prioridade em uma fila

Então, por que eu só ouço programadores se referindo a estruturas de dados complexas ou tipos abstratos de dados quando usam o termo "estrutura de dados"? Os programadores têm uma definição diferente para o termo que a definição do dicionário?

Rachel
fonte
1
O termo evoluiu com o tempo. A multidão CS normalmente usa o termo para tipos genéricos de estruturas que podem conter vários itens de dados relacionados (listas ligadas, árvores etc ...)
Oded
1
não é apenas uma coisa de terminologia? uma cadeia é realmente um conjunto de caracteres, e é uma estrutura de dados que representa uma sequência de charachters individuais
Mithir
3
"Estrutura de dados" não é um termo auto-definido? É qualquer estrutura para armazenar dados! É meio difícil levar a questão a sério.
Michael K
1
@ Rachel Então, sua pergunta é se tipos de dados primitivos são estruturas de dados ou não? if programmers mean something different when they talk about data structuresainda está buscando opiniões.
Yannis
2
"Primitivo" depende completamente do escopo. No nível binário, não existe int, por exemplo. Em um nível ainda mais baixo, não há nem mesmo bits - apenas viés elétrico. Novamente, esse é um termo auto-definido - não é uma boa pergunta.
Michael K

Respostas:

20

A definição genérica de "estrutura de dados" é qualquer coisa que possa reter seus dados de maneira estruturada; portanto, isso inclui tipos compostos e tipos primitivos, além de tipos de dados abstratos. Por exemplo, a stringé uma estrutura de dados, pois pode conter uma sequência de caracteres de maneira estruturada.

No entanto, o termo também tem outro significado para os programadores.

Como o termo "estruturas de dados" é tão amplo, os desenvolvedores geralmente usam um termo mais específico para identificar do que estão falando, como classou data objectou primitive type, e o termo específico usado para os tipos de dados mais complexos ou abstratos é "estrutura de dados"

É por isso que você ouve a "estrutura de dados" ser usada com mais frequência para tipos de dados abstratos como Matrizes, Listas, Árvores e Hashtables, e não para itens como tipos de dados primitivos

Alex
fonte
4
Eu acho que os gráficos também são muito comuns, mas raramente são representados nas bibliotecas padrão porque são muito difíceis de construir de uma maneira genérica e eficiente.
Klaim
Então, quando os programadores falam sobre "estruturas de dados", geralmente estão falando sobre tipos de dados abstratos ? E embora tipos primitivos (como int, bool ou char) e compostos (como uma classe, struct ou enum) ainda sejam considerados estruturas de dados pelos programadores, eles geralmente são referidos por termos diferentes?
Rachel
1
@ Rachel tecnicamente uma estrutura de dados também pode ser uma implementação caseira usando ponteiros / classes etc. Fiz algumas "estruturas de dados" muito feias semelhantes às listas como parte de uma tarefa de lição de casa em C ++. Nós simplesmente não chamamos estruturas de dados de classes com tanta frequência porque elas geralmente são algo mais específico.
Ben Brocka
@BenBrocka Ahhh, então "estrutura de dados" é um termo muito amplo que abrange esses outros objetos, no entanto, normalmente é melhor ser mais específico ao falar sobre estruturas de dados e usar termos como "tipo de dados primitivo" ou "objeto de dados" em vez de "estrutura de dados". E o termo específico comumente usado para objetos como Lists, Trees, Graphs, etc só acontece de ser "estruturas de dados"
Rachel
1
@ Rachel sim, mesmo que tudo seja uma estrutura de dados (a rigor), o termo 'estrutura de dados' geralmente se refere a esses tipos de dados abstratos. Eu diria que o termo 'estrutura de dados' da perspectiva de um desenvolvedor se refere a como ele está armazenando os dados. Pode ser uma lista na memória, um arquivo no disco ou uma estrutura de dados personalizada que ele mesmo implementou.
955 Alex
5

O termo refere-se a ambos, embora coisas como intse booleansnormalmente sejam consideradas tipos de dados primitivos (ou estruturas de dados primitivas). O termo em si simplesmente se refere a qualquer coisa que armazena dados de uma maneira específica. Certamente intatende a essa definição tão bem quanto a uma tabela Hash, mas é mais simples.

Normalmente, quando as pessoas usam a estrutura de dados, elas se referem a estruturas de dados mais complexas, e não às mais simples, mas ambas atendem à definição.

Oleksi
fonte
2
Acho que nunca ouvi alguém se referir a uma int"estrutura de dados".
Qwertie
2
@ Qwertie me também, mas ainda é o que é. É chamado de "tipo de dados" mais vezes, mas que praticamente significa a mesma coisa como "estrutura de dados"
Oleksi
0

A definição mais simples e muito básica, que eu já ouvi sobre estruturas de dados, é armazenar dados na memória de forma que operações básicas como inserção, atualização, exclusão etc. possam ser realizadas de maneira eficiente em termos de tempo e memória.

Portanto, um tipo de dados informa o tipo de dados que armazenamos nele. Pode ser inteiro, decimal, caractere, string ou um objeto. Podem ser tipos compostos ou tipos primitivos, além de tipos de dados abstratos.

Porém, usamos estruturas de dados quando queremos armazenar dados complexos na memória. Essa é a razão pela qual ouvimos apenas sobre tipos de dados como Matrizes, Listas, Árvores e Hashtables, e não para coisas como tipos de dados primitivos

Nishant sethi
fonte