Ketika programmer berbicara tentang "struktur data", apa yang mereka maksud?

18

Ketika programmer berbicara tentang "struktur data", apakah mereka hanya berbicara tentang tipe data abstrak seperti daftar , pohon , hash , grafik , dll?

Atau apakah istilah itu termasuk struktur yang menyimpan data, seperti tipe komposit (objek kelas, struct, enum, dll.) Dan tipe primitif (boolean, int, char, dll.)?

Saya hanya pernah mendengar programmer menggunakan istilah untuk referensi struktur data yang kompleks atau tipe data abstrak, namun artikel Wikipedia yang menyediakan daftar struktur data mencakup tipe komposit dan tipe primitif dalam definisi, yang bukan yang saya harapkan (bahkan meskipun itu masuk akal).

Ketika melihat-lihat online saya melihat tempat-tempat lain yang merujuk pada istilah "struktur data" dalam pengertian pemrograman karena hanya merujuk pada tipe data abstrak, seperti kuliah ini dari Departemen Ilmu Komputer Universitas Stony Brook yang menyatakan

Struktur data adalah implementasi aktual dari tipe data abstrak tertentu.

atau wikibook ini pada struktur data , yang menggunakan istilah dalam kalimat seperti ini:

Karena struktur data adalah abstraksi tingkat yang lebih tinggi, mereka hadir untuk kami operasi pada kelompok data, seperti menambahkan item ke daftar, atau mencari item prioritas tertinggi dalam antrian

Jadi mengapa saya hanya pernah mendengar programer mengacu pada struktur data yang kompleks atau tipe data abstrak ketika mereka menggunakan istilah "struktur data"? Apakah programmer memiliki definisi yang berbeda untuk istilah tersebut daripada definisi kamus?

Rachel
sumber
1
Istilah ini berkembang seiring waktu. Kerumunan CS biasanya menggunakan istilah untuk tipe umum struktur yang dapat menampung banyak item data terkait (daftar terkait, pohon dll ...)
Oded
1
bukankah itu hanya istilah terminologi? string sebenarnya adalah array karakter, dan ini adalah struktur data yang mewakili urutan karakter individu
Mithir
3
Bukankah "struktur data" adalah istilah yang didefinisikan sendiri? Ini adalah struktur apa pun untuk menyimpan data! Agak sulit untuk menganggap pertanyaan itu serius.
Michael K
1
@ Rachel Jadi pertanyaan Anda sebenarnya apakah tipe data primitif adalah struktur data atau tidak? if programmers mean something different when they talk about data structuresmasih memilih pendapat.
yannis
2
"Primitif" sepenuhnya tergantung pada ruang lingkup. Pada tingkat biner tidak ada yang namanya int, misalnya. Pada tingkat yang lebih rendah bahkan tidak ada bit - hanya bias listrik. Sekali lagi, ini adalah istilah yang mendefinisikan diri sendiri - bukan pertanyaan yang bagus sama sekali.
Michael K

Jawaban:

20

Definisi umum dari "struktur data" adalah segala sesuatu yang dapat menyimpan data Anda dengan cara terstruktur, jadi ya ini akan mencakup tipe komposit dan tipe primitif selain tipe data abstrak. Sebagai contoh, a stringadalah struktur data karena dapat menampung urutan karakter dengan cara terstruktur.

Namun, istilah ini juga memiliki arti lain bagi para programmer.

Karena istilah "struktur data" begitu luas, pengembang biasanya menggunakan istilah yang lebih spesifik untuk mengidentifikasi apa yang mereka bicarakan, seperti classatau data objectatau primitive type, dan istilah spesifik yang digunakan untuk sebagian besar tipe data yang kompleks atau abstrak adalah "struktur data"

Inilah sebabnya mengapa Anda mendengar "struktur data" paling sering digunakan untuk tipe data abstrak seperti Array, Daftar, Pohon dan Hashtable, dan bukan untuk hal-hal seperti tipe data primitif

Alex
sumber
4
Saya pikir grafik juga sangat umum tetapi mereka jarang diwakili di perpustakaan standar karena sangat sulit untuk dibuat dengan cara yang umum dan efisien.
Klaim
Jadi ketika programmer berbicara tentang "struktur data", mereka biasanya berbicara tentang tipe data abstrak ? Dan meskipun tipe primitif (seperti int, bool, atau char) dan tipe komposit (seperti kelas, struct, atau enum) masih dianggap struktur data oleh programmer, mereka biasanya disebut dengan istilah yang berbeda?
Rachel
1
@Rachel secara teknis struktur data bisa menjadi implementasi homebrewed menggunakan pointer / kelas juga. Saya membuat beberapa "struktur data" yang sangat jelek mirip dengan daftar sebagai bagian dari tugas pekerjaan rumah C ++. Kami hanya tidak memanggil struktur data kelas sesering karena mereka biasanya sesuatu yang lebih spesifik.
Ben Brocka
@ BenBrocka Ahhh jadi "struktur data" adalah istilah yang sangat luas yang tidak mencakup objek-objek lain, namun biasanya lebih baik untuk lebih spesifik ketika berbicara tentang struktur data dan menggunakan istilah seperti "tipe data primitif" atau "objek data" alih-alih "struktur data". Dan istilah tertentu yang biasa digunakan untuk benda seperti Lists, Trees, Graphs, dll hanya terjadi menjadi "struktur data"
Rachel
1
@ Rachel ya, meskipun semuanya adalah struktur data (secara tegas) istilah 'struktur data' biasanya merujuk pada tipe data abstrak tersebut. Saya akan mengatakan istilah 'struktur data' dari perspektif pengembang mengacu pada bagaimana dia menyimpan data. Itu bisa dalam daftar memori, file dalam disk atau bisa menjadi struktur data kustom yang dia implementasikan sendiri.
Alex
5

Istilah ini mengacu pada keduanya, meskipun hal-hal seperti intsdan booleansbiasanya dianggap tipe data primitif (atau struktur data primitif). Istilah itu sendiri hanya merujuk pada apa pun yang menyimpan data dengan cara tertentu. Tentunya intmemenuhi definisi ini dan juga sesuatu seperti tabel Hash, hanya saja lebih sederhana.

Biasanya, ketika orang menggunakan struktur data, mereka merujuk pada struktur data yang lebih kompleks, dan bukan yang lebih sederhana tetapi keduanya memenuhi definisi.

Oleksi
sumber
2
Saya tidak berpikir saya pernah mendengar seseorang menyebut intsebagai "struktur data".
Qwertie
2
@ Beri tahu saya juga, tapi tetap seperti itu. Ini disebut "tipe data" lebih sering, tetapi itu cukup berarti hal yang sama dengan "struktur data"
Oleksi
0

Definisi paling sederhana dan sangat mendasar, yang pernah saya dengar tentang struktur data, adalah menyimpan data ke dalam memori sedemikian rupa sehingga operasi dasar seperti menyisipkan, memperbarui, menghapus dll dapat dilakukan dengan cara yang efisien dalam hal waktu dan memori.

Jadi, tipe data memberitahu tipe data yang telah kita simpan ke dalamnya. Itu bisa bilangan bulat, desimal, karakter, string atau objek. Ini bisa tipe komposit atau tipe primitif selain tipe data abstrak.

Tapi, kami menggunakan struktur data ketika kami ingin menyimpan data kompleks dalam memori. Ini adalah alasan mengapa kita hanya mendengar tentang tipe data seperti Array, Daftar, Pohon dan Hashtable, dan bukan untuk hal-hal seperti tipe data primitif

Sethi Nishant
sumber