Kiedy programiści mówią o „strukturach danych”, do czego się odnoszą?

18

Kiedy programiści mówią o „strukturach danych”, czy mówią tylko o abstrakcyjnych typach danych, takich jak listy , drzewa , skróty , wykresy itp.?

Czy też termin ten obejmuje dowolną strukturę przechowującą dane, taką jak typy złożone (obiekty klasy, struktury, wyliczenia itp.) I typy pierwotne (boolean, int, char itp.)?

Słyszałem tylko, że programiści używają tego terminu w odniesieniu do złożonych struktur danych lub abstrakcyjnych typów danych, jednak artykuł w Wikipedii, który zawiera listę struktur danych, zawiera zarówno typy złożone, jak i typy pierwotne w definicji, co nie jest tym, czego się spodziewałem (nawet choć ma to sens).

Rozglądając się online, widzę inne miejsca, które odnoszą się do terminu „struktura danych” w sensie programowania jako odnoszące się tylko do abstrakcyjnych typów danych, takich jak wykład z Wydziału Informatyki Uniwersytetu Stony Brook, który stwierdza

Struktura danych jest faktyczną implementacją określonego abstrakcyjnego typu danych.

lub ten wikibook o strukturach danych , który używa tego terminu w zdaniach takich jak ten:

Ponieważ struktury danych są abstrakcjami wyższego poziomu, przedstawiają nam operacje na grupach danych, takie jak dodawanie elementu do listy lub wyszukiwanie elementu o najwyższym priorytecie w kolejce

Dlaczego więc kiedykolwiek słyszę programistów odnoszących się do złożonych struktur danych lub abstrakcyjnych typów danych, gdy używają terminu „struktura danych”? Czy programiści mają inną definicję terminu niż definicja słownika?

Rachel
źródło
1
Termin ewoluował z czasem. Tłum CS zwykle używa tego terminu dla ogólnych typów struktur, które mogą pomieścić wiele elementów powiązanych danych (powiązane listy, drzewa itp.)
Oded
1
czy to nie jest kwestia terminologii? ciąg jest w rzeczywistości tablicą znaków i jest strukturą danych, która reprezentuje sekwencję poszczególnych
znaków
3
Czy „struktura danych” nie jest terminem samookreślonym? To dowolna struktura do przechowywania danych! Trudno jest poważnie potraktować to pytanie.
Michael K
1
@Rachel Więc twoje pytanie dotyczy tego, czy prymitywne typy danych są strukturami danych, czy nie? if programmers mean something different when they talk about data structureswciąż jednak szuka opinii.
yannis
2
„Prymitywne” całkowicie zależy od zakresu. Na poziomie binarnym na przykład nie ma czegoś takiego jak int. Na jeszcze niższym poziomie nie ma nawet bitów - tylko odchylenie elektryczne. Ponownie, jest to samo definiujący się termin - wcale nie jest to dobre pytanie.
Michael K,

Odpowiedzi:

20

Ogólna definicja „struktury danych” to wszystko, co może przechowywać dane w uporządkowany sposób, więc tak, obejmowałoby to typy złożone i typy pierwotne oprócz abstrakcyjnych typów danych. Na przykład a stringjest strukturą danych, ponieważ może przechowywać sekwencję znaków w uporządkowany sposób.

Jednak termin ten ma również inne znaczenie dla programistów.

Ponieważ termin „struktury danych” jest tak szeroki, programiści zwykle używają bardziej szczegółowego terminu, aby zidentyfikować to, o czym mówią, na przykład classlub data objectlub primitive type, a konkretnym terminem używanym dla najbardziej złożonych lub abstrakcyjnych typów danych jest „struktura danych”

Dlatego słyszysz, że „struktura danych” jest najczęściej używana w abstrakcyjnych typach danych, takich jak tablice, listy, drzewa i tabele skrótów, a nie w takich rzeczach, jak prymitywne typy danych

Alex
źródło
4
Myślę, że wykresy są również bardzo powszechne, ale rzadko są reprezentowane w standardowych bibliotekach, ponieważ bardzo trudno jest je zbudować w ogólny i wydajny sposób.
Klaim
Kiedy więc programiści mówią o „strukturach danych”, zwykle mówią o abstrakcyjnych typach danych ? I chociaż prymitywne typy (takie jak int, bool lub char) i typy złożone (takie jak klasa, struct lub enum) są nadal uważane przez programistów za struktury danych, zwykle określa się je innymi terminami?
Rachel
1
@Rachel technicznie struktura danych może być implementacją typu homebrew, używając również wskaźników / klas ect. Zrobiłem kilka bardzo brzydkich „struktur danych” podobnych do list w ramach zadania domowego z C ++. Po prostu nie nazywamy struktur danych klas tak często, ponieważ zwykle są one bardziej szczegółowe.
Ben Brocka,
@BenBrocka Ahhh, więc „struktura danych” jest bardzo szerokim terminem, który obejmuje te inne obiekty, jednak zazwyczaj lepiej jest być bardziej szczegółowym, mówiąc o strukturach danych i używać terminów takich jak „pierwotny typ danych” lub „obiekt danych” zamiast "struktura danych". I powszechnie używany termin specyficzny dla obiektów takich jak Lists, Trees, Graphsitp właśnie dzieje się „struktury danych”
Rachel
1
@Rachel tak, nawet jeśli wszystko jest strukturą danych (ściśle mówiąc), termin „struktura danych” zwykle odnosi się do tych abstrakcyjnych typów danych. Powiedziałbym, że termin „struktura danych” z perspektywy dewelopera odnosi się do sposobu przechowywania danych. Może to być lista w pamięci, plik na dysku lub niestandardowa struktura danych, którą sam zaimplementował.
Alex
5

Termin odnosi się do obu, choć rzeczy takie jak intsi booleanssą zwykle uważane za prymitywne typy danych (lub prymitywne struktury danych). Sam termin po prostu odnosi się do wszystkiego, co przechowuje dane w określony sposób. Z pewnością intspełnia tę definicję, podobnie jak coś w rodzaju tabeli mieszania, tyle że jest prostsze.

Zazwyczaj, gdy ludzie używają struktury danych, odnoszą się do bardziej złożonych struktur danych, a nie tych prostszych, ale obie spełniają definicję.

Oleksi
źródło
2
Nie sądzę, żebym kiedykolwiek słyszał, by ktoś nazywał intsię „strukturą danych”.
Qwertie
2
@ Qwertie mi też, ale wciąż tak jest. Częściej nazywany jest „typem danych”, ale w zasadzie oznacza to to samo, co „struktura danych”
Oleksi
0

Najprostszą i bardzo podstawową definicją, jaką kiedykolwiek słyszałem o strukturach danych, jest przechowywanie danych w pamięci w taki sposób, aby podstawowe operacje, takie jak wstawianie, aktualizacja, usuwanie itp., Mogły być wykonywane w wydajny sposób pod względem czasu i pamięci.

Tak więc typ danych informuje o typie danych, które w nim zapisaliśmy. Może to być liczba całkowita, dziesiętna, znak, ciąg lub obiekt. Mogą to być typy złożone lub typy pierwotne oprócz abstrakcyjnych typów danych.

Ale korzystamy ze struktur danych, gdy chcemy przechowywać w pamięci wszelkie złożone dane. To jest powód, dla którego słyszymy tylko o typach danych, takich jak tablice, listy, drzewa i tabele skrótów, a nie o rzeczach takich jak prymitywne typy danych

Nishant sethi
źródło