Programcılar “veri yapıları” hakkında konuştuğunda neyi kastediyorlar?


18

Programcılar "Veri yapıları" bahsederken, sadece bahsediyoruz soyut veri türleri gibi listeleri , ağaçlar , karmaları , grafikler vb?

Yoksa bu terim, kompozit türler (sınıf nesneleri, yapılar, numaralamalar vb.) Ve ilkel türler (boolean, int, char vb.) Gibi verileri tutan herhangi bir yapıyı içeriyor mu?

Programcıların bu terimi karmaşık veri yapılarına veya soyut veri türlerine başvurmak için kullandıklarını duydum, ancak veri yapılarının bir listesini sağlayan Wikipedia makalesi , tanımda beklediğim gibi olmayan kompozit türleri ve ilkel türleri de içeriyor. mantıklı olsa da).

Etrafa zaman çevrimiçi ben gibi yalnızca soyut veri tipleri atıfta olarak programlama anlamda dönem "veri yapısı" bölümüne bakın başka yerlerde, bkz Bilgisayar Bilimleri Stony Brook Üniversitesi Bölümü'nden bu ders hangi devletler

Veri yapısı, belirli bir soyut veri türünün gerçek bir uygulamasıdır.

ya da bu gibi cümlelerdeki terimi kullanan veri yapılarındaki bu wikibook :

Veri yapıları daha üst düzey soyutlamalar olduğu için, bize bir listeye öğe eklemek veya kuyruktaki en yüksek öncelikli öğeye bakmak gibi veri grupları üzerinde işlemler sunarlar.

Öyleyse neden sadece "veri yapısı" terimini kullandıklarında karmaşık veri yapılarına veya soyut veri türlerine atıfta bulunan programcıları duyuyorum? Programcıların terim için sözlük tanımından farklı bir tanımı var mı?


1
Terim zamanla gelişti. CS kalabalık normalde (... vb bağlantılı listeler, ağaçlar) ilgili verilerin birden fazla öğe tutabilir yapıların jenerik türleri için terimini kullanır
Oded

1
bu sadece bir terminoloji meselesi değil mi? bir dize aslında bir dizi karakterdir ve bireysel karakterlerin bir dizisini temsil eden bir veri yapısıdır
Mithir

3
"Veri yapısı" tanımlanmış bir terim değil mi? Veri depolamak için herhangi bir yapı! Soruyu ciddiye almak biraz zor.
Michael K

1
@Rachel Peki sorunuz aslında ilkel veri türlerinin veri yapıları olup olmadığıdır? if programmers mean something different when they talk about data structuresyine de görüşler için yoklama yapıyor.
yannis

2
"İlkel" tamamen kapsama bağlıdır. İkili düzeyde, örneğin int diye bir şey yoktur. Daha düşük bir seviyede bile bitler yoktur - sadece elektriksel önyargı. Yine, bu kendini tanımlayan bir terim - hiç de iyi bir soru değil.
Michael K

Yanıtlar:


20

"Veri yapısı" nın genel tanımı, verilerinizi yapılandırılmış bir şekilde tutabilen herhangi bir şeydir, bu nedenle evet, soyut veri türlerine ek olarak bileşik türleri ve ilkel türleri de içerir. Örneğin a string, bir karakter dizisini yapılandırılmış bir şekilde tutabildiği için bir veri yapısıdır.

Ancak, terimin programcılar için başka bir anlamı daha vardır.

Dönem "veri yapıları" öylesine geniş, geliştiriciler genellikle gibi, ne konuştuğunu belirlemek için daha belirli bir terimi kullanmak olduğundan classya data objectya primitive type, ve en karmaşık veya soyut veri türleri için kullanılan özel terim "veri yapısı" dır

Bu nedenle "veri yapısı" nın en sık Diziler, Listeler, Ağaçlar ve Hashtable gibi soyut veri türleri için kullanıldığını duyarsınız, ilkel veri türleri gibi şeyler için değil


4
Grafiklerin de çok yaygın olduğunu düşünüyorum, ancak standart kütüphanelerde nadiren temsil ediliyorlar çünkü jenerik ve verimli bir şekilde inşa edilmesi çok zor.
Klaim

Programcılar "veri yapıları" hakkında konuşurken genellikle soyut veri türlerinden mi bahsediyorlar ? Ve ilkel tipler (int, bool veya char gibi) ve kompozit tipler (bir sınıf, yapı veya enum gibi) hala programcılar tarafından veri yapıları olarak kabul edilmelerine rağmen, genellikle farklı terimlerle mi ifade edilir?
Rachel

1
@Rachel teknik olarak bir veri yapısı işaretçiler / sınıflar vb kullanarak bir ev yapımı uygulama olabilir. C ++ ödevinin bir parçası olarak listelere benzer çok çirkin "veri yapıları" yaptım. Sınıf veri yapılarını sık sık çağırmayız çünkü bunlar genellikle daha spesifik bir şeydir.
Ben Brocka

@BenBrocka Ahhh yani "veri yapısı" bu diğer nesneleri kapsayan çok geniş bir terimdir, ancak veri yapıları hakkında konuşurken daha spesifik olmak ve "ilkel veri türü" veya "veri nesnesi" gibi terimler kullanmak daha iyidir. "veri yapısı". Ve nesneler için yaygın olarak kullanılan spesifik terim gibi Lists, Trees, Graphsvb sadece olmak "veri yapıları" olur
Rachel

1
@Rachel evet, her şey bir veri yapısı olmasına rağmen (kesinlikle konuşursak) 'veri yapısı' terimi genellikle bu soyut veri türlerini ifade eder. Bir geliştiricinin bakış açısından 'veri yapısı' teriminin, verileri nasıl sakladığını ifade ettiğini söyleyebilirim. Bir bellek listesinde, diskte bir dosya olabilir veya kendi uyguladığı özel bir veri yapısı olabilir.
Alex

5

Terim her ikisini de ifade eder, ancak tipik olarak ilkel veri türleri (veya ilkel veri yapıları) gibi intsve booleansbunlar olarak kabul edilir. Terimin kendisi, verileri belirli bir şekilde depolayan her şeyi ifade eder. Kesinlikle intbu tanımın yanı sıra Hash tablosu gibi bir şeyle tanışır, sadece daha basittir.

Tipik olarak, insanlar veri yapısını kullandıklarında, daha basit olanlara değil daha karmaşık veri yapılarına atıfta bulunurlar, ancak her ikisi de tanımı karşılar.


2
Hiç kimsenin intbir "veri yapısı" olarak adlandırdığını duyduğumu sanmıyorum .
Qwertie

2
@ Bana da cevap ver, ama yine de böyle. Daha çok "veri türü" olarak adlandırılır, ancak bu hemen hemen "veri yapısı" ile aynı anlama gelir
Oleksi

0

Veri yapılarını duyduğum en basit ve çok temel tanım, verileri belleğe, ekleme, güncelleme, silme vb. Temel işlemlerin zaman ve bellek açısından verimli bir şekilde yapılabileceği şekilde depolamaktır.

Dolayısıyla, bir veri türü, içinde sakladığımız veri türünü söyler. Tamsayı, ondalık, karakter, dize veya bir nesne olabilir. Bu, soyut veri türlerine ek olarak bileşik türler veya ilkel türler olabilir.

Ancak, karmaşık verileri bellekte saklamak istediğimizde veri yapılarını kullanırız. İlkel veri türleri gibi şeyler için değil, yalnızca Diziler, Listeler, Ağaçlar ve Hashtable'lar gibi veri türlerini duymamızın nedeni budur.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.